Android手势识别器GestureDetector使用详解

发布时间 - 2026-01-10 23:28:16    点击率:

以前只知道控件的onTouchEvent()事件,它的动作有MotionEvent.ACTION_DOWN、MotionEvent.ACTION_MOVE、MotionEvent.ACTION_UP;今天有个需求,要监听控件的双击、拖动、滑动等事件,这时onTouchEvent()很明显不能满足我们的需求,经多方打听,找到了今天的主角GestureDetector,下面就对它进行简单的学习。

构造方法:

已过时的有2个,不推荐使用。

GestureDetector(GestureDetector.onGestureListener listener);

GestureDetector(GestureDetector.onGestureListener listener,Handler handler);

推荐使用。

 GestureDeterctor(Context context,GestureDetector.onGestureListener listener);

 GestureDeterctor(Context context,GestureDetector.onGestureListener listener,Handler handler);

 GestureDeterctor(Context context,GestureDetector.onGestureListener listener,Handler handler,boolean unused);

参数handler主要用来执行延时操作时使用,参数unused暂时没有使用。

从构成函数可以看出,当我们需要创建一个GestureDetector对象时,必须给它传一个GestureDetector.onGestureListener对象,查看API之后,发现它是个接口(interface),创建GestureDetector.onGestureListener的对象时,必须实现一下几个方法:

1、onDown(MotionEvent e);

      当用户按下时的回调。

2、onFling(MotionEvent e1,MontionEvent e2,float velocityX,float velocityY);

      当用户快速拖动,并离开屏幕时,控件还在滑动的回调。

3、onLongPress(MotionEvent e);

      当用户长按控件时的回调。

4、onScroll(MotionEvent e1,MotionEvent e2,float distanceX,float distanceY);

      当用户拖着控件(控件本身并没有动)滑动时的回调。

5、onShowPress(MotionEvent e);

      当用户按下,还没有执行移动或者抬起的动作的回调。

6、onSingleTapUp(MotionEvent e);

      用户按下,立即抬起,没有做其它动作时的回调。

有了这个监听之后,我们还可以给GestureDetector设置双击监听,使用的方法是:

mGestureDetector.setOnDoubleTapListener(GestureDetector.OnDoubleTapListener onDoubleListener);

参数是双击监听的对象,GestureDetector.OnDoubleTapListener它也是一个接口(interface),创建它的对象时,也必须实现以下几个方法。

1、onDoubleTap(MotionEvent e);

      当用户双击时回调。

2、onDoubleTapEvent(MotionEvent e);

      双击间隔事件的回调。

3、onSingleTapConfirmed(MotionEvent e);

      当用户单击时回调。

上面的两个监听,回调函数都是必须实现,有时候我们不需要监听所有的事件,只对自己感兴趣的事件进行监听,GestureDetector有个内部类帮我们实现此功能GestureDetector.SimpleOnGestureListener,该类实现了GestureDetector.onGestureListener、GestureDetector.onDoubleTapListener、GestureDetector.onContextClickListener这三个接口,并实现了它们的方法,只不过是空实现,在我们需要这三个接口的时候,我们可以创建GestureDetector.SimpleOnGestureListener对象,然后需要监听哪个事件,我们就重写它的哪个方法,下面我把它的所有方法都实现了,其实和上边两个接口实现的方法是一样。

GestureDetector.SimpleOnGestureListener mGestureDetector = new SimpleOnGestureListener(){ 
 
   @Override 
   public boolean onSingleTapUp(MotionEvent e) { 
    return super.onSingleTapUp(e); 
   } 
 
   @Override 
   public void onLongPress(MotionEvent e) { 
    super.onLongPress(e); 
   } 
 
   @Override 
   public boolean onScroll(MotionEvent e1, MotionEvent e2, 
     float distanceX, float distanceY) { 
    return super.onScroll(e1, e2, distanceX, distanceY); 
   } 
 
   @Override 
   public boolean onFling(MotionEvent e1, MotionEvent e2, 
     float velocityX, float velocityY) { 
    return super.onFling(e1, e2, velocityX, velocityY); 
   } 
 
   @Override 
   public void onShowPress(MotionEvent e) { 
    super.onShowPress(e); 
   } 
 
   @Override 
   public boolean onDown(MotionEvent e) { 
    return super.onDown(e); 
   } 
 
   @Override 
   public boolean onDoubleTap(MotionEvent e) { 
    return super.onDoubleTap(e); 
   } 
 
   @Override 
   public boolean onDoubleTapEvent(MotionEvent e) { 
    return super.onDoubleTapEvent(e); 
   } 
 
   @Override 
   public boolean onSingleTapConfirmed(MotionEvent e) { 
    return super.onSingleTapConfirmed(e); 
   } 
    
  }; 

只有理论没有实践,怎么行呢?这里我也写了一个Demo,这个Demo是我从另一篇博客中抄的,文章的内容也是参考他的博客写的,下面会把大神的那篇博客地址贴出来。

参考资料:Android GestureDetector用户手势检测实例讲解

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。


# Android手势识别器GestureDetector  # Android手势识别器  # Android手势识别  # Android GestureDetector用户手势检测实例讲解  # android使用gesturedetector手势识别示例分享  # Android GestureDetector手势滑动使用实例讲解  # Android自定义viewgroup可滚动布局 GestureDetector手势监听(5)  # Android自定义GestureDetector实现手势ImageView  # Android GestureDetector实现手势滑动效果  # Android编程使用GestureDetector实现简单手势监听与处理的方法  # Android触摸及手势操作GestureDetector  # Android使用手势监听器GestureDetector遇到的不响应问题  # Android如何使用GestureDetector进行手势检测详解  # 回调  # 双击  # 按下  # 几个  # 有个  # 推荐使用  # 实现了  # 拖动  # 这三个  # 都是  # 是一个  # 我也  # 是个  # 还没有  # 还可以  # 还在  # 不需要  # 我把  # 感兴趣  # 我们可以 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: 米侠浏览器网页图片不显示怎么办 米侠图片加载修复  简历没回改:利用AI润色让你的文字更专业  Laravel如何使用Spatie Media Library_Laravel图片上传管理与缩略图生成【步骤】  Laravel怎么使用Session存储数据_Laravel会话管理与自定义驱动配置【详解】  黑客如何利用漏洞与弱口令入侵网站服务器?  Laravel怎么在Controller之外的地方验证数据  最好的网站制作公司,网购哪个网站口碑最好,推荐几个?谢谢?  Javascript中的事件循环是如何工作的_如何利用Javascript事件循环优化异步代码?  php结合redis实现高并发下的抢购、秒杀功能的实例  如何在 React 中条件性地遍历数组并渲染元素  Laravel怎么防止CSRF攻击_Laravel CSRF保护中间件原理与实践  如何用PHP工具快速搭建高效网站?  EditPlus中的正则表达式实战(6)  制作无缝贴图网站有哪些,3dmax无缝贴图怎么调?  如何安全更换建站之星模板并保留数据?  如何构建满足综合性能需求的优质建站方案?  如何快速搭建自助建站会员专属系统?  详解Android图表 MPAndroidChart折线图  Laravel如何使用Guzzle调用外部接口_Laravel发起HTTP请求与JSON数据解析【详解】  如何有效防御Web建站篡改攻击?  Win11应用商店下载慢怎么办 Win11更改DNS提速下载【修复】  Win11怎么更改系统语言为中文_Windows11安装语言包并设为显示语言  Laravel Admin后台管理框架推荐_Laravel快速开发后台工具  JS实现鼠标移上去显示图片或微信二维码  Laravel事件监听器怎么写_Laravel Event和Listener使用教程  韩国服务器如何优化跨境访问实现高效连接?  Win11关机界面怎么改_Win11自定义关机画面设置【工具】  安克发布新款氮化镓充电宝:体积缩小 30%,支持 200W 输出  深圳网站制作培训,深圳哪些招聘网站比较好?  Python高阶函数应用_函数作为参数说明【指导】  Laravel中的Facade(门面)到底是什么原理  ,网页ppt怎么弄成自己的ppt?  如何在香港免费服务器上快速搭建网站?  如何在Windows服务器上快速搭建网站?  济南网站建设制作公司,室内设计网站一般都有哪些功能?  如何快速搭建高效香港服务器网站?  如何在IIS中新建站点并配置端口与物理路径?  Python文件流缓冲机制_IO性能解析【教程】  bing浏览器学术搜索入口_bing学术文献检索地址  北京网页设计制作网站有哪些,继续教育自动播放怎么设置?  Laravel怎么实现前端Toast弹窗提示_Laravel Session闪存数据Flash传递给前端【方法】  uc浏览器二维码扫描入口_uc浏览器扫码功能使用地址  Python文件异常处理策略_健壮性说明【指导】  佛山网站制作系统,佛山企业变更地址网上办理步骤?  网站设计制作书签怎么做,怎样将网页添加到书签/主页书签/桌面?  logo在线制作免费网站在线制作好吗,DW网页制作时,如何在网页标题前加上logo?  laravel怎么配置Redis作为缓存驱动_laravel Redis缓存配置教程  Laravel如何使用Service Container和依赖注入?(代码示例)  Claude怎样写约束型提示词_Claude约束提示词写法【教程】  高端智能建站公司优选:品牌定制与SEO优化一站式服务