android - 检测不同视图上的手势

时间:2011-05-27 09:32:48

标签: android multi-touch gestures

我需要在一个以上的视图中检测不同的手势。我的观点需要能够接收点击,双击和拖动事件。我尝试了手势探测器,但我的实现只显示了全局手势事件,我无法将这些事件连接到特定视图。

在我的activity.onCreate:

    dthandler = new DoubleTapHandler();
    mDetector = new GestureDetector(this,dthandler);
    gestureListener = new View.OnTouchListener() {
    public boolean onTouch(View v, MotionEvent event) {
        Log.d("myLog","touch");
        mDetector.onTouchEvent(event);
        return false;
    }
};

在我的活动中,我覆盖了dispatchTouch函数:

@Override 
      public boolean dispatchTouchEvent(MotionEvent me){ 
        this.mDetector.onTouchEvent(me);
       return super.dispatchTouchEvent(me); 
      }

这就是我尝试将touchevent与我的观点联系起来的方式:

prod.setOnTouchListener(this.gestureListener);

我的DoubleTapHandler:

public class DoubleTapHandler implements OnDoubleTapListener, OnGestureListener {
        private ProductView relatedView;

        @Override
        public boolean onDoubleTapEvent(MotionEvent e) {   
            Log.d("myLog", "onDoubleTapEvent");
            Log.d("myLog",""+e.getSource());
            return false;                      
        }

        @Override
        public boolean onDoubleTap(MotionEvent e) {
            Log.d("myLog", "onDoubleTap"+relatedView);
            return false;
        }

        @Override
        public boolean onSingleTapConfirmed(MotionEvent e) {
            Log.d("myLog", "singletap");
            return false;
        }
}

有人有建议吗? 谢谢!

2 个答案:

答案 0 :(得分:2)

要使其正常工作,请将手势直接附加到每个视图,然后您可以使用不同的实现。

答案 1 :(得分:1)

疯狂的想法。在包含所有视图的某个视图上创建全局手势侦听器。并在所有视图上手动调用dispatchTouchEvent。它很棘手,但它可以工作。

然后在您的视图上添加onTouchEventListenrer。

如果这不起作用,那么正确的方法是:通过自己实现手势监听器(点击和拖动不应该那么难)并使用intercept touch events