3

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

在我的活动.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;
        }
}

有人有建议吗?谢谢!

4

2 回答 2

2

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

于 2011-05-27T09:43:18.010 回答
2

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

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

如果这不起作用,那么正确的方法是:自己实现手势侦听器(点击和拖动不应该那么难)并使用拦截触摸事件

于 2015-01-21T22:52:03.737 回答