七、GestureDetector各手势方法介绍


GestureDetector 类含有三个接口: OnGestureListener OnDoubleTapListener OnContextClickListener 两个内部类: SimpleOnGestureListener GestureHandler

1. 接口: OnGestureListener

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
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);
抬起:手指快速单击屏幕,离开触摸屏时触发。

2.接口: OnDoubleTapListener

1
2
3
4
5
6
7
8
boolean onSingleTapConfirmed(MotionEvent e);
抬起:与 onSingleTapUp 相同,但有附加条件,确保单击之后短时间内没有再次单击,才会触发。

boolean onDoubleTap(MotionEvent e);
双击:双击的第二下Touch down时触发。

boolean onDoubleTapEvent(MotionEvent e);
双击:双击的第二下Touch down和up都会触发,可用e.getAction()区分。

3.接口: OnContextClickListener。

1
2
3
boolean onContextClick(MotionEvent e);

Android6.0(API 23)及以上使用,用于检测外部设备上的按钮是否按下的,例如蓝牙触控笔上的按钮。(如果侦听 onContextClick(MotionEvent),则必须在 View 的 onGenericMotionEvent(MotionEvent)中调用 GestureDetector 的 OnGenericMotionEvent(MotionEvent)。)

4. 继承 GestureDetector.SimpleOnGestureListener 类,重写手势操作方法

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26

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