我使用手势来捕获触摸事件,但当我长按时它会触发两个事件。 当我按住按钮时如何禁用 onDown 事件? 这是我的代码。
final GestureDetector gestureDetector = new GestureDetector(
new GestureDetector.SimpleOnGestureListener() {
public void onLongPress(MotionEvent e) {
Toast.makeText(mContext,
"long" + position + counter++,
Toast.LENGTH_SHORT).show();
}
public boolean onDown(MotionEvent e) {
Toast.makeText(mContext,
"touch" + position + counter++,
Toast.LENGTH_SHORT).show();
return true;
}
});
category.setOnTouchListener(new OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
return gestureDetector.onTouchEvent(event);
}
});
您可能想使用
abstract boolean onSingleTapUp(MotionEvent e)
。
您正在使用的回调public boolean onDown(MotionEvent e)
会在所有手势开始时触发(当手指触摸屏幕时)。
无论手势是单击、长按还是任何其他手势,都只能在手势结束时(松开手指时)才能检测到。
正如 kotucz 所说,
onDown
在所有手势开始时被触发。使用 onSingleTapUp
代替 onDown
是一个可行的替代方案。
但是,如果您需要
MotionEvent
无法提供的 onSingleTapUp
信息,例如鼠标信息(例如 event.isButtonPressed(MotionEvent.BUTTON_PRIMARY)
),您仍然需要 onDown
来提供此类信息。在这种情况下,你应该实施
onDown
处理额外信息并使用或不使用事件(即分别返回 true 或 false),具体取决于您的业务案例onSingleTapUp
适用于 onDown
尚未消耗事件的情况onLongPress
适用于 onDown
尚未消耗事件的情况