缩放百分比值以 android xamarin 形式显示在 cameralayout 中
Zoomin percentage values shows in cameralayout in android xamarin forms
目前正在使用 twofingers zoomin 和 zoomout 实现 zoomin 和 zoomout 按预期工作,但我们在 zoomin 和 zoomout 中显示百分比值,如果可能的话使用 Textview 或任何其他方式在 view 中显示缩放百分比值android xamarin
public override bool OnTouchEvent(MotionEvent e)
{
switch (e.Action & MotionEventActions.Mask)
{
case MotionEventActions.Down:
oldDist = getFingerSpacing(e);
break;
case MotionEventActions.Move:
float newDist = getFingerSpacing(e);
if (newDist > oldDist)
{
//mCamera is your Camera which used to take picture, it should already exit in your custom Camera
handleZoom(true, camera);
}
else if (newDist < oldDist)
{
handleZoom(false, camera);
}
oldDist = newDist;
break;
}
return true;
}
private void handleZoom(bool isZoomIn, global::Android.Hardware.Camera camera)
{
global::Android.Hardware.Camera.Parameters parameters = camera.GetParameters();
var s = camera.GetParameters().ZoomRatios;
if (parameters.IsZoomSupported)
{
int maxZoom = parameters.MaxZoom;
int zoom = parameters.Zoom;
if (isZoomIn && zoom < maxZoom)
{
zoom++;
}
else if(zoom > 0)
{
zoom--;
}
parameters.Zoom = zoom;
var zoomValue = Convert.ToDecimal(s[zoom]);
zoomValue = Math.Round((zoomValue / 100), 2);
Toast toast = Toast.MakeText(Android.App.Application.Context, _languageCache.Translate(zoomValue + "%"), ToastLength.Short);
toast.SetGravity(GravityFlags.Center, 0, 0);
toast.Show();
camera.SetParameters(parameters);
PrepareAndStartCamera();
}
else
{
Android.Util.Log.Error("lv", "zoom not supported");
}
}
private static float getFingerSpacing(MotionEvent e)
{
if(e.PointerCount==2)
{
int pointerIndex = e.FindPointerIndex(_activePointerId);
float x = e.GetX(pointerIndex);
float y = e.GetY(pointerIndex);
return (float)Math.Sqrt(x * x + y * y);
}
}
您可以使用 ZoomRatios
来获取所有缩放值的缩放比率。以 1/100 为增量使用缩放比例。该列表从小到大排序。第一个元素始终为100。最后一个元素为最大缩放值的缩放比例。
您可以在 handleZoom
方法中的 IsZoomSupported
之后调用它。
var s = camera.GetParameters().ZoomRatios;
var zoomValue = Convert.ToDecimal(s[zoom]);
value = Math.Round((zoomValue / 100), 2);
您可以设置百分比,如 value + "x":
2.5x // a zoom of 2.5x is returned as 250.
之后,您可以使用 dialpg 警报显示此值或自定义相机布局。
更新:
添加一个 TextView 以在屏幕中显示缩放值,如下所示。
<TextView
android:layout_width="50dp"
android:layout_height="50dp"
android:elevation="10dp"
android:id="@+id/textView1" />
然后在您的 OnTouchEvent 中设置值。
if (value != 0)
{
textView.Text = value+"x";
}
目前正在使用 twofingers zoomin 和 zoomout 实现 zoomin 和 zoomout 按预期工作,但我们在 zoomin 和 zoomout 中显示百分比值,如果可能的话使用 Textview 或任何其他方式在 view 中显示缩放百分比值android xamarin
public override bool OnTouchEvent(MotionEvent e)
{
switch (e.Action & MotionEventActions.Mask)
{
case MotionEventActions.Down:
oldDist = getFingerSpacing(e);
break;
case MotionEventActions.Move:
float newDist = getFingerSpacing(e);
if (newDist > oldDist)
{
//mCamera is your Camera which used to take picture, it should already exit in your custom Camera
handleZoom(true, camera);
}
else if (newDist < oldDist)
{
handleZoom(false, camera);
}
oldDist = newDist;
break;
}
return true;
}
private void handleZoom(bool isZoomIn, global::Android.Hardware.Camera camera)
{
global::Android.Hardware.Camera.Parameters parameters = camera.GetParameters();
var s = camera.GetParameters().ZoomRatios;
if (parameters.IsZoomSupported)
{
int maxZoom = parameters.MaxZoom;
int zoom = parameters.Zoom;
if (isZoomIn && zoom < maxZoom)
{
zoom++;
}
else if(zoom > 0)
{
zoom--;
}
parameters.Zoom = zoom;
var zoomValue = Convert.ToDecimal(s[zoom]);
zoomValue = Math.Round((zoomValue / 100), 2);
Toast toast = Toast.MakeText(Android.App.Application.Context, _languageCache.Translate(zoomValue + "%"), ToastLength.Short);
toast.SetGravity(GravityFlags.Center, 0, 0);
toast.Show();
camera.SetParameters(parameters);
PrepareAndStartCamera();
}
else
{
Android.Util.Log.Error("lv", "zoom not supported");
}
}
private static float getFingerSpacing(MotionEvent e)
{
if(e.PointerCount==2)
{
int pointerIndex = e.FindPointerIndex(_activePointerId);
float x = e.GetX(pointerIndex);
float y = e.GetY(pointerIndex);
return (float)Math.Sqrt(x * x + y * y);
}
}
您可以使用 ZoomRatios
来获取所有缩放值的缩放比率。以 1/100 为增量使用缩放比例。该列表从小到大排序。第一个元素始终为100。最后一个元素为最大缩放值的缩放比例。
您可以在 handleZoom
方法中的 IsZoomSupported
之后调用它。
var s = camera.GetParameters().ZoomRatios;
var zoomValue = Convert.ToDecimal(s[zoom]);
value = Math.Round((zoomValue / 100), 2);
您可以设置百分比,如 value + "x":
2.5x // a zoom of 2.5x is returned as 250.
之后,您可以使用 dialpg 警报显示此值或自定义相机布局。
更新:
添加一个 TextView 以在屏幕中显示缩放值,如下所示。
<TextView
android:layout_width="50dp"
android:layout_height="50dp"
android:elevation="10dp"
android:id="@+id/textView1" />
然后在您的 OnTouchEvent 中设置值。
if (value != 0)
{
textView.Text = value+"x";
}