GestureDetector.onTouchEvent(MotionEvent e)在所有手势上调用onLongPress

时间:2015-08-24 08:23:33

标签: android android-custom-view gesturedetector

我有一个自定义视图,我想设置长按一下监听器。 我正在使用以下代码来设置相同的内容。

final GestureDetector gestureDetector = (new GestureDetector(new GestureDetector.SimpleOnGestureListener() {
    public void onLongPress(MotionEvent e) {
        Log.e("test", "Long press detected");
    }
}));

public boolean onTouchEvent(MotionEvent event) {
    return gestureDetector.onTouchEvent(event);
}

问题在于所有手势是否是单击,双击onLongPress被调用。

我可以通过实现onDown()方法来获取代码,但是为什么在没有实现时它不起作用?只有当手势是onLongPress时,才应该调用onLongPress()吗?

2 个答案:

答案 0 :(得分:0)

为什么使用GestureDetector进行longClick?如果你只需要这个Gesture,那么只需为视图设置一个LongClickListener。 http://developer.android.com/reference/android/view/View.html#setOnLongClickListener(android.view.View.OnLongClickListener)

如果您仍想实现GestureDetector,请按照以下示例操作: https://developer.android.com/training/gestures/detector.html 从快速看看,您似乎以不同的方式实现了触摸,这就是它在示例中的完成方式:

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

答案 1 :(得分:0)

以防有人仍然被卡住, 我在执行以下操作时发现这种情况正在发生:

return gestureDetector.onTouchEvent(event);

与此相对:(在麦克洛文在评论中发布的链接中也提到过)

gestureDetector.onTouchEvent(event);
return true;

thisthis可能解释了原因:

  

当心创建为ACTION_DOWN事件返回false的侦听器。如果执行此操作,将不会为后续的ACTION_MOVE和ACTION_UP事件字符串调用侦听器。这是因为ACTION_DOWN是所有触摸事件的起点。