Android:缩放两个视图

Posted

技术标签:

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

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

【问题讨论】:

【参考方案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 以放大自定义视图。

【讨论】:

以上是关于Android:缩放两个视图的主要内容,如果未能解决你的问题,请参考以下文章

动画(缩放和翻译)android画布视图上的图像的一部分

Android围绕动态枢轴旋转视图

使用图像无法正确缩放的绘制视图缩放:Android

Android:自定义视图缩放/捏合

如何使用句柄在android中缩放视图?

在 Android 中动画平移和缩放视图