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--------------------