Google为了方便我们进行手势检测,早就封装了相关的内容提供我们使用。即Android手势检测,主要就是对GestureDetector类的使用和说明。
1.GestureDetector
GestureDetector可以使用MotionEvents检测各种手势和事件。其内部包含四个监听器(三个接口以及一个外部类):
接口 | 含义 |
---|---|
OnGestureListener | 手势检测:包括 按下(Down) 扔(Fling) 长按(LongPress) 滚动(Scroll) 触摸反馈(ShowPress) 单击抬起(SingleTapUp) |
OnDoubleTapListener | 双击事件:有三个回调方法 双击(DoubleTap) 单击确认(SingleTapConfirmed) 双击事件回调(DoubleTapEvent) |
OnContextClickListener | 它是在Android6.0(API 23)才添加的一个选项,是用于检测外部设备上的按钮是否按下的,例如蓝牙触控笔上的按钮,一般情况下,忽略即可。 |
SimpleOnGestureListener | 三个接口的空实现,使用较为方便 |
GestureDetector常用的构造函数:
构造函数 |
---|
public GestureDetector(Context context, OnGestureListener listener, Handler handler) |
public GestureDetector(Context context, OnGestureListener listener) |
第二种需要传递上下文和手势监听器,没什么好讲的;关于第一种,传递一个Handler只是为了给GestureDetector手势监听器提供一个Looper。通常不需要传递,因为在内部会自己生成一个Handler用来传递消息,如果在主线程创建GestureDetector则会自己获取主线程中的Looper。如果在没有创建Looper的子线程中创建GestureDetector则会报错。
第二种构造函数的使用以及注意事项:
方式一:
//在主线程中创建Handler,Handler会自动获取主线程的Looper
final Handler handler = new Handler();
new Thread(new Runnable() {
@Override
public void run() {
GestureDetector detector = new GestureDetector(MainActivity.this,new GestureDetector.SimpleOnGestureListener(){
},handler);
}
}).start();
方式二:
//方式二 子线程中创建Handler并指定Looper
new Thread(new