缩放 activity

Zooming an activity

所以我花了几个小时在网上搜索帮助,但所有论坛和文档都没有向我正确解释我应该采取的最佳方式。

目前我有一个 activity 和 XML 相对布局(背景设置为地图图片),我想实现多手势缩放功能。经过大量阅读,我似乎应该使用必须在视图内实现的 ScrollGestureDetector。

我想做到这样,用户可以在屏幕上的任何地方使用 2 指针手势,它会放大。问题是我不知道如何实现这个,也找不到资源来显示我如何对 activity.

执行此操作

有什么方法可以为我的 RelativeLayout 实现 ScrollGestureDetector 吗?我是否应该创建一个覆盖整个屏幕并呈现图片的自定义视图,以便我可以在 class 定义中实现 ScrollGestureDetector?我该怎么办?

如果图像在 ImageView 范围内,使用双指缩放缩放图像效果最佳。 ImageView 可以任意缩放图像,而背景图像仅根据视图边界进行缩放。

您只需在 activity 上调用 setContentView() 并使用包含 ImageView.

的布局

要在您的代码中使用 ScaleGestureDetector,您必须执行以下操作

  1. 在您的视图中声明一个 ScaleGestureDetector。

    private ScaleGestureDetector mScaleGestureDetector;
    
  2. 使用缩放事件侦听器初始化它,最好在 onCreate():

    mScaleGestureDetector = new ScaleGestureDetector(this, new ScaleGestureDetector.OnScaleGestureListener() {
        @Override
        public boolean onScale(ScaleGestureDetector detector) {
            // your impl here
            return false;
        }
    
        @Override
        public boolean onScaleBegin(ScaleGestureDetector detector) {
            // your impl here
            return false;
        }
    
        @Override
        public void onScaleEnd(ScaleGestureDetector detector) {
            // your impl here
        }
    })
    
  3. 将 ScaleGestureDetector 添加到您的 onTouchEvent() 方法中:

    @Override
    public boolean onTouchEvent(MotionEvent event) {
    
        mScaleGestureDetector.onTouchEvent(event);
    
        // do other stuff
        return super.onTouchEvent(event);
    }
    

奇怪的是,ScaleGestureDetector.onTouchEvent() 总是 returns true,但是您可以使用 isInProgress() 来判断缩放操作是否已经开始。