【发布时间】:2021-08-20 17:25:39
【问题描述】:
根据android training,如果你扩展GestureDetector.SimpleOnGestureListener,并从onDown(...)返回false,那么GestureDetector.SimpleOnGestureListener的其他方法将永远不会被调用:
无论您是否使用 GestureDetector.OnGestureListener,最好实现一个返回 true 的 onDown() 方法。这是因为所有手势都以 onDown() 消息开头。如果你从 onDown() 返回 false,就像 GestureDetector.SimpleOnGestureListener 默认做的那样,系统假定你想忽略手势的其余部分,并且 GestureDetector.OnGestureListener 的其他方法永远不会被调用。这有可能在您的应用程序中导致意外问题。唯一应该从 onDown() 返回 false 的情况是,如果你真的想忽略整个手势。
但是,在我的简单测试中,onScroll(...) 被调用。
public void onCreate(Bundle savedInstanceState) {
mDetector = new GestureDetectorCompat(this, MyGestureListener);
}
public boolean onTouchEvent(MotionEvent event) {
mDetector.onTouchEvent(event);
return true;
}
class MyGestureListener extends GestureDetector.SimpleOnGestureListener {
private boolean scrollEvent;
@Override
public boolean onDown (MotionEvent event) {
Log.v("GESTURE", "onDown ");
return false;
}
@Override
public boolean onScroll (MotionEvent e1, MotionEvent e2, float distanceX, float distanceY) {
Log.v("GESTURE", "onScroll");
return true;
}
另一个类似的问题是下一个定义,同样来自同一个 android 培训页面:
单个 on 方法的返回值为 true 表示您已经处理了触摸事件。 false 返回值通过视图堆栈向下传递事件,直到成功处理触摸。
这与之前的报价有何不同?
【问题讨论】:
标签: android android-gesture android-touch-event