转载请注明出处,原文链接:https://blog.csdn.net/u013642500/article/details/80489115
【前言】
GestureDetector 类含有三个接口:OnGestureListener、OnDoubleTapListener、OnContextClickListener。
GestureDetector 类含有两个内部类:SimpleOnGestureListener、GestureHandler。
【正文】
直接通过调用接口重写手势操作方法:
接口OnGestureListener:
boolean onDown(MotionEvent e);
按下:手指接触到触摸屏的那一刹那触发。(任何单击手势动作都会先执行一次 onDown 动作。)
void onShowPress(MotionEvent e);
按住:手指按在触摸屏上触发,它的时间范围在按下起效,在长按(onLongPress)和滚动(onScroll)之前。
void onLongPress(MotionEvent e);
长按:手指按在触摸屏上,不松开,且手指不移动持续一段时间触发。(该方法执行前一定会执行一次 onShowPress 动作。如果执行该方法,则不会执行抬起 onSingleTapUp 动作。)
boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY);
滚动:手指在触摸屏上滑动时触发。(如果执行该方法,则不会执行 onSingleTapUp 动作。)
boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY);
抛掷:手指在触摸屏上迅速移动,并松开的动作,离开触摸屏时触发。(如果执行该方法,则不会执行 onSingleTapUp 动作。)
boolean onSingleTapUp(MotionEvent e);
抬起:手指快速单击屏幕,离开触摸屏时触发。
接口OnDoubleTapListener:
boolean onSingleTapConfirmed(MotionEvent e);
抬起:与 onSingleTapUp 相同,但有附加条件,确保单击之后短时间内没有再次单击,才会触发。
boolean onDoubleTap(MotionEvent e);
双击:双击的第二下Touch down时触发。
boolean onDoubleTapEvent(MotionEvent e);
双击:双击的第二下Touch down和up都会触发,可用e.getAction()区分。
接口OnContextClickListener:
boolean onContextClick(MotionEvent e);
Android6.0(API 23)及以上使用,用于检测外部设备上的按钮是否按下的,例如蓝牙触控笔上的按钮。(如果侦听 onContextClick(MotionEvent),则必须在 View 的 onGenericMotionEvent(MotionEvent)中调用 GestureDetector 的 OnGenericMotionEvent(MotionEvent)。)
继承 GestureDetector.SimpleOnGestureListener 类,重写手势操作方法:
GestureDetector mGestureDetector = new GestureDetector(context, new GestureDetector.SimpleOnGestureListener() {
@Override
public boolean onSingleTapUp(MotionEvent e) {
return true;
}
@Override
public void onLongPress(MotionEvent e) {
}
@Override
public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY) {
return true;
}
});
不必将每一个方法都重写,想实现哪个方法,就重写哪个。
【注意事项】
1、如果监听双击事件:onSingleTapUp()会被触发两次,但是onSingleTapConfirmed()一次都不会被触发。所以,如果你既想监听单击事件,又想监听双击时间,那么请使用onSingleTapConfirmed()函数。
2、点击一下,非常快地(不滑动)Touch up:onDown → onSingleTapUp → onSingleTapConfirmed
3、点击一下,稍微慢点地(不滑动)Touch up:onDown → onShowPress → onSingleTapUp → onSingleTapConfirmed