首页 > 解决方案 > 当我们在 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();
            }
    

}

标签: xamarin.androidzoomingpinchzoom

解决方案


推荐阅读