如何在Android ScrollView中启用Scale,以防止滚动它并点击它的子项目?

时间:2012-12-30 15:57:09

标签: android scrollview multi-touch gesturedetector

我有一个扩展Android ScrollView的自定义视图。直接子项是一种相对布局,其中包含可单击的子项。 我希望能够:

  1. 在滚动视图上检测onScale手势(我将手动管理项目的比例)。
  2. 垂直滚动ScrollView。
  3. 保持这些子项目可以点击。
  4. 到目前为止,我所尝试的是(伪代码):

    public class CustomView extends ScrollView { 
        @Override
        public boolean onInterceptTouchEvent(MotionEvent ev) {  
            return super.onInterceptTouchEvent(ev) || mScaleDetector.onTouchEvent(ev);
        }
    
       @Override
       public boolean onTouchEvent(MotionEvent ev) {
           return mScaleDetector.onTouchEvent(ev);
       }
    
        private class ScaleListener extends
            ScaleGestureDetector.SimpleOnScaleGestureListener {
    
                @Override
                public boolean onScale(ScaleGestureDetector detector) {
                    // Handle the scale..
                    return true;
                }
           }
    }
    

    我还尝试了onInterceptMethod的不同配置,例如首先调用super并返回mScaleDetector.onTouchEvent等等。

    我成功拦截了比例或点击和滚动,但不是两者。

    谢谢, 丹尼尔

1 个答案:

答案 0 :(得分:9)

解决方案是使用:

     @Override
    public boolean dispatchTouchEvent(MotionEvent ev){
        super.dispatchTouchEvent(ev);    
        return mScaleDetector.onTouchEvent(ev); 
    }

并且不会覆盖onInterceptTouchEventonTouchEvent方法。