首页 > 解决方案 > Android:缩放两个视图

问题描述

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

标签: javaandroidxmlviewzooming

解决方案


您可以使用此答案ImageView中提供的自定义支持缩放缩放,并获取要应用自定义视图的比例值,您需要创建一个带有回调的侦听器,您通常可以从下面的类似方法调用该回调onScale()ScaleListener

interface OnScaleListener {
    public onScaleChange(float scaleFactor);
}

OnScaleListener mOnScaleListener;

setScaleListener(OnScaleListener listener) {
    this.mOnScaleListener = listener;
}

mScaleFactor然后使用反映图像放大/缩小多少的值触发此回调。因此您可以在此类中创建 onScaleListener 接口的实例,并触发其回调onScaleChange()

这是处理捏缩放的自定义 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;
        }
    }

然后让您的活动或您的其他自定义视图实现OnScaleListener接口以获取比例值。

请检查此问题以放大自定义视图。


推荐阅读