GestureDetector 的基本使用

Android对于手势的检测提供了一系列的API,其中包括对于手势检测的监听器、对于手势识别的API等等。

OnGestureListener

手势检测,主要有以下类型事件:按下(Down)、 一扔(Fling)、长按(LongPress)、滚动(Scroll)、触摸反馈(ShowPress) 和 单击抬起(SingleTapUp)

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
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
//当手指按下的时候触发下面的方法
override fun onDown(e: MotionEvent?): Boolean {
Log.i(TAG, "onDown 当手指按下的时候触发下面的方法 x " + e?.x + " y " + e?.y)
return false
}

//当用户手指在屏幕上按下,而且还未移动和松开的时候触发这个方法
override fun onShowPress(e: MotionEvent?) {
Log.i(TAG, "onShowPress 当用户手指在屏幕上按下,而且还未移动和松开的时候触发这个方法 x " + e?.x + " y " + e?.y)
}

//当手指在屏幕上轻轻点击的时候触发下面的方法
override fun onSingleTapUp(e: MotionEvent?): Boolean {
Log.i(TAG, "onSingleTapUp 当手指在屏幕上轻轻点击的时候触发下面的方法 x " + e?.x + " y " + e?.y)
return false
}

//当手指在屏幕上滚动的时候触发这个方法
override fun onScroll(
e1: MotionEvent?,
e2: MotionEvent?,
distanceX: Float,
distanceY: Float
): Boolean {
Log.i(TAG, "onScroll 当手指在屏幕上滚动的时候触发这个方法")
return false
}

//当用户手指在屏幕上长按的时候触发下面的方法
override fun onLongPress(e: MotionEvent?) {
Log.i(TAG, "onLongPress 当用户手指在屏幕上长按的时候触发下面的方法 x " + e?.x + " y " + e?.y)
}

//当用户的手指在触摸屏上拖过的时候触发下面的方法,velocityX代表横向上的速度,velocityY代表纵向上的速度
override fun onFling(
e1: MotionEvent?,
e2: MotionEvent?,
velocityX: Float,
velocityY: Float
): Boolean {
Log.i(TAG, "onFling 当用户的手指在触摸屏上拖过的时候触发下面的方法,velocityX代表横向上的速度,velocityY代表纵向上的速度")
return false
}

OnDoubleTapListener

双击事件,有三个回调类型:双击(DoubleTap)、单击确认(SingleTapConfirmed) 和 双击事件回调(DoubleTapEvent)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18

//单击事件
override fun onSingleTapConfirmed(e: MotionEvent?): Boolean {
Log.i(TAG, "onSingleTapConfirmed 单击事件 x " + e?.x + " y " + e?.y)
return false
}

//双击事件
override fun onDoubleTap(e: MotionEvent?): Boolean {
Log.i(TAG, "onDoubleTap 双击事件 x " + e?.x + " y " + e?.y)
return false
}

//双击间隔中发生的动作
override fun onDoubleTapEvent(e: MotionEvent?): Boolean {
Log.i(TAG, "onDoubleTapEvent 双击间隔中发生的动作 x " + e?.x + " y " + e?.y)
return false
}

OnContextClickListener

用于检测外部设备上的按钮是否按下的,例如蓝牙触控笔上的按钮

参考

安卓自定义View进阶-手势检测(GestureDetector)