GestureDetector
参考 Android 8.0 源码
/framework/base/core/java/android/view/GestureDetector.java
基本简介
是用来手势检测的类,用于辅助检测用户的单击、滑动、长按、双击等行为。
public class GestureDetector {
//---;
public interface OnGestureListener {
}
public interface OnDoubleTapListener {
}
public static class SimpleOnGestureListener implements OnGestureListener, OnDoubleTapListener, OnContextClickListener {
}
//---;
}
使用方式如下:
1 . 首先创建一个GestureDetector对象,并实现onGestureListener接口,根据业务需求,我们还可以实现onDoubleTapListener从而能够监听双击行为;
GestureDetector gestureDetector = new GestureDetector(this);
//解决长按屏幕后无法拖动的现象;
gestureDetector.setIsLongpressEnabled(false);
2 . 然后,接管目标View的onTouchEvent()方法,在待监听View的onTouchEvent()方法中添加如下实现方法:
boolean consume = gestureDetector.onTouchEvent(event);
return consume;
3 . 最后,就可以选择性地实现onGestureListener和OnDoubleTapListener中的方法了。这两个接口中的方法介绍如下:
方法名 | 描述 |
---|---|
onDown() | 手指轻轻触摸屏幕的一瞬间,由一个ACTION_DOWN触发 |
onShowPress() | 手指轻轻触摸屏幕,尚未松开或拖动,由一个ACTION_DOWN触发;注意和onDown()的区别,该方法强调的是没有松开或者拖动的状态 |
onSingleTapUp() | 手指松开,伴随着一个ACTION_UP触发,这是单击行为 |
onScroll() | 手指按下屏幕并拖动,由一个ACTION_DOWN和多个ACTION_MOVE触发,这是拖动行为 |
onLongPress() | 长久地按着屏幕不放,即长按 |
onFling() | 按下触摸屏、快速滑动后松开,由一个ACTION_DOWN和多个ACTION_MOVE和一个ACTION_UP触发,这是快速滑动行为 |
onDoubleTap() | 双击,由两次连续的单击组成,该方法不可以与onSingleTapConfirmed()共存 |
onSingleTapConfirmed() | 严格的单击行为;注意该方法与onSingleTapUp()方法的区别,如果触发了onSingleTapConfirmed()方法,那么就不可能再紧跟着另一个单击行为,也就是这只能是单击,而不可能是双击中的一次单击 |
onDoubleTapEvent() | 表示发生了双击行为,在双击期间,ACTION_DWON、ACTION_MOVE、ACTION_UP都会触发此回调方法 |
上面的方法中,并不是所有的方法都会用到。在实际开发中,可以不使用GestureDetector,而是在View的onTouchEvent()方法中实现所需要的监听。如果只是监听滑动相关的,在onTouchEvent()方法中实现;如果要监听双击这种行为,就使用GestureDetector。
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
---------------------last line for now--------------------