Android自定义View-手势检测(GestureDetector)

本文详细介绍了Android中GestureDetector的使用,包括构造函数、监听器和常见手势的回调顺序。强调了在子线程中使用GestureDetector时Handler必须带有Looper的重要性,以及为何在监听单击和双击事件时,推荐使用onSingleTapConfirmed而不是OnClickListener。
摘要由CSDN通过智能技术生成

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 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值