【问题标题】:android - detect gesture on different viewsandroid - 检测不同视图上的手势
【发布时间】:2016-12-06 20:20:53
【问题描述】:

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

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

有人有建议吗? 谢谢!

【问题讨论】:

    标签: android multi-touch gestures


    【解决方案1】:

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

    【讨论】:

    • 您执行了 prod.setOnTouchListener(),您也可以针对特定视图执行此操作,以使它们对您的手势做出反应。
    • 是的,我做到了(prod 是我的观点之一)。但我没有收到有关此视图的手势。我刚刚收到 OnTouch 事件。
    • 尝试用onTouchEvent()替换dispatchTouchEvent(),也可以看看stackoverflow.com/questions/937313/…
    • 您介意添加一些代码来说明如何操作吗?
    • 其实这个问题3年了,大部分东西都已经重构和优化了,但无论如何,在原始问题代码中,不覆盖dispatchTouchEvent就足够了,而是覆盖onTouchEvent,它应该发挥魅力。
    【解决方案2】:

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多