xamarin.android - 当我们在 Xamarin Android 上尝试 ZoomIn 和 ZoomOut 时,只有 Android 版本 7 和 8 会出现几种颜色阴影
问题描述
在 cameraPageRenderer 中,我们在应用程序中处理 zoomIn 和 zoomOut。当我们尝试 ZoomIn 和 ZoomOut 时,会出现几种颜色阴影。请看一下这张图片。因此,我们通过处理 PrepareAndStartCamera() 来解决这个问题。请参阅下面的代码片段。
公共覆盖布尔 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 static float getFingerSpacing(MotionEvent e)
{
if (e.PointerCount == 2)
{
float x = e.GetX(0) - e.GetX(1);
float y = e.GetY(0) - e.GetY(1);
return (float)Math.Sqrt(x * x + y * y);
}
return 0;
}
private void handleZoom(bool isZoomIn, global::Android.Hardware.Camera camera)
{
//camera.StopPreview();
// camera.Release();
// camera = global::Android.Hardware.Camera.Open((int)cameraType);
global::Android.Hardware.Camera.Parameters parameters = camera.GetParameters();
if (parameters.IsZoomSupported)
{
int maxZoom = parameters.MaxZoom;
int zoom = parameters.Zoom;
if (isZoomIn && zoom < maxZoom)
{
zoom++;
}
else if (zoom > 0)
{
zoom--;
}
parameters.Zoom = zoom;
camera.SetParameters(parameters);
camera.SetPreviewTexture(surfaceTexture);
// PrepareAndStartCamera();
}
else
{
Android.Util.Log.Error("lv", "zoom not supported");
}
}
使用 PrepareAndStartCamera() 后,当 ZoomingIn 或 ZoomingOut 相机并拍照时,它会恢复到正常大小的图片。如果我们不使用此 PrepareAndStartCamera() 方法,则会出现颜色阴影。
private void PrepareAndStartCamera()
{
try
{
camera.StopPreview();
var display = activity.WindowManager.DefaultDisplay;
if (display.Rotation == SurfaceOrientation.Rotation0)
{
camera.SetDisplayOrientation(90);
}
if (display.Rotation == SurfaceOrientation.Rotation270)
{
camera.SetDisplayOrientation(180);
}
camera.StartPreview();
}
}
解决方案
推荐阅读
- android - 从 json 响应中读取主题列表值
- testing - 在“循环控制器”、恒定运行时间和“恒定计时器”中使用无限循环进行 Jmeter 测试。这种方法有哪些优点以及如何调整
- javascript - 角度 ngFor 调用 javascript
- r - 将不在 extrafonts 库中的字体添加到 R
- python - 在 Python 中获取索引越界错误
- uvm - 如何在uvm中使用'initial begin?
- jquery - dataTable 参数在角度 6 中不起作用
- python - 将参数传递给 Python 线程时出现 TypeError
- java - Spring Boot 读取不带前缀的地图属性
- entity-framework - 使用实体框架(流利的 Api)的可选一对多关系