【问题标题】:Zoomin percentage values shows in cameralayout in android xamarin forms缩放百分比值以 android xamarin 形式显示在相机布局中
【发布时间】:2021-08-25 04:46:30
【问题描述】:

目前正在使用双指实现放大和缩小,放大和缩小按预期工作,但我们在放大和缩小时显示百分比值,如果可能的话,使用 Textview 或任何其他方式显示值,以在 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);
    }
        }

【问题讨论】:

    标签: xamarin.android zooming percentage calculation


    【解决方案1】:

    您可以使用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";
            }
    

    【讨论】:

    • 如果我使用放大和缩小,一旦我释放如何停止警报,它会像循环一样连续显示
    • 我正在使用自定义相机布局,也使用 TextView,但遗憾的是没有查看值
    • 我已经做了 textview textcolor 显示黑色所以 UI 值无法显示 mrg 只是我想通了谢谢你的 rply
    猜你喜欢
    • 2016-11-05
    • 2011-12-08
    • 2023-04-02
    • 2011-09-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-19
    • 2013-05-19
    相关资源
    最近更新 更多