【问题标题】:Android: Zooming with two viewsAndroid:缩放两个视图
【发布时间】:2020-07-24 10:09:15
【问题描述】:

在我的 android 应用程序中,我有一个 ImageView,在它上面我放置了一个自定义视图,它显示了一些矩形。现在我想通过捏两根手指来放大图像。通常这不是问题,但我希望自定义视图以与图像相同的比例因子进行缩放。我不知道如何做到这一点。有人能帮助我吗? 谢谢!

【问题讨论】:

    标签: java android xml view zooming


    【解决方案1】:

    您可以使用this answer 中提供的自定义ImageView,它支持通过捏合进行缩放,并且要获取要应用自定义视图的缩放值,您需要创建一个带有回调的侦听器,您通常可以从中调用ScaleListeneronScale() 方法如下所示

    interface OnScaleListener {
        public onScaleChange(float scaleFactor);
    }
    
    OnScaleListener mOnScaleListener;
    
    setScaleListener(OnScaleListener listener) {
        this.mOnScaleListener = listener;
    }
    

    然后用mScaleFactor的值触发这个回调,它反映了图像放大/缩小了多少。所以你可以在这个类中创建一个 onScaleListener 接口的实例,并触发它的回调onScaleChange()

    这是处理捏合缩放的custom ImageView 的内部类。

        private class ScaleListener extends
                ScaleGestureDetector.SimpleOnScaleGestureListener {
            @Override
            public boolean onScaleBegin(ScaleGestureDetector detector) {
                mode = ZOOM;
                return true;
            }
    
            @Override
            public boolean onScale(ScaleGestureDetector detector) {
                float mScaleFactor = detector.getScaleFactor();
                float origScale = saveScale;
                saveScale *= mScaleFactor;
                if (saveScale > maxScale) {
                    saveScale = maxScale;
                    mScaleFactor = maxScale / origScale;
                } else if (saveScale < minScale) {
                    saveScale = minScale;
                    mScaleFactor = minScale / origScale;
                }
    
                if (origWidth * saveScale <= viewWidth
                        || origHeight * saveScale <= viewHeight)
                    matrix.postScale(mScaleFactor, mScaleFactor, viewWidth / 2,
                            viewHeight / 2);
                else
                    matrix.postScale(mScaleFactor, mScaleFactor,
                            detector.getFocusX(), detector.getFocusY());
    
                mOnScaleListener.onScaleChange(mScaleFactor);
    
                fixTrans();
                return true;
            }
        }
    

    然后让你的activity或者你的其他自定义view实现OnScaleListener接口来获取scale值。

    请查看此question 以放大自定义视图。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-05-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-04-06
      相关资源
      最近更新 更多