Android如何使用GestureDetector进行手势检测详解

作者:QiShare 时间:2022-03-21 22:08:46 

1.引言

在操作应用的时候,会有很多不同的手势操作,如按下、单击、双击、长按等手势,我们可以在这些手势事件中添加相应的业务逻辑,那么如何检测不同的手势操作就比较重要了,本文将带大家了解如何使用GestureDetector进行手势检测。

2.进行手势检测

2.1 创建GestureDetector

进行手势检测之前,需要先新建GestureDetector对象,示例如下:

gestureDetector = new GestureDetector(context, new GestureDetector.OnGestureListener() {
   @Override
   public boolean onDown(MotionEvent e) {
       log("onDown");
       return true;
   }

@Override
   public void onShowPress(MotionEvent e) {
       log("onShowPress");
   }

@Override
   public boolean onSingleTapUp(MotionEvent e) {
       log("onSingleTapUp");
       return true;
   }

@Override
   public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY) {
       log("onScroll");
       return true;
   }

@Override
   public void onLongPress(MotionEvent e) {
       log("onLongPress");
   }

@Override
   public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) {
       log("onFling");
       return true;
   }
});

2.2 与onTouchEvent结合使用

示例中重写了Activity的onTouchEvent(MotionEvent event)方法,并在其内部使用GestureDetector处理触摸事件,示例如下:

@Override
public boolean onTouchEvent(MotionEvent event) {
   boolean b = gestureDetector.onTouchEvent(event);
   if (b) {
       return true;
   }
   return super.onTouchEvent(event);
}

2.3 GestureDetector.OnGestureListener

实现GestureDetector.OnGestureListener内的方法,在其中可以检测到多种手势,如onDown(MotionEvent e)按下、onShowPress(MotionEvent e)已经执行按下,还没有移动或抬起、onSingleTapUp(MotionEvent e)单击、onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY)滚动、onLongPress(MotionEvent e)长按、onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY)。

2.4 检测双击手势

双击手势也是一种常见的手势事件,使用GestureDetector检测双击手势需要调用setOnDoubleTapListener()方法设置GestureDetector.OnDoubleTapListener(),并实现其中的方法,其中的onDoubleTap(MotionEvent e)表示双击事件,示例如下:

gestureDetector.setOnDoubleTapListener(new GestureDetector.OnDoubleTapListener() {
   @Override
   public boolean onSingleTapConfirmed(MotionEvent e) {
       log("onSingleTapConfirmed");
       return true;
   }

@Override
   public boolean onDoubleTap(MotionEvent e) {
       log("onDoubleTap");
       return true;
   }

@Override
   public boolean onDoubleTapEvent(MotionEvent e) {
       log("onDoubleTapEvent");
       return true;
   }
});
}

2.5 GestureDetector.SimpleOnGestureListener

如果不想实现GestureDetector.OnGestureListener 内的多个方法,那么可以创建类并继承GestureDetector.SimpleOnGestureListener,示例如下:

class SimpleGestureListener extends GestureDetector.SimpleOnGestureListener{
   @Override
   public boolean onDown(MotionEvent e) {

return true;
   }
}

在创建GestureDetector对象的时候,传入扩展后的类对象即可,示例如下:

gestureDetector = new GestureDetector(context, new SimpleGestureListener());

3.总结

使用GestureDetector能方便地进行手势检测,灵活合理地使用手势检测,在其中处理应用的业务逻辑,能让体验更加的友好。

来源:https://juejin.cn/post/7057027268144529415

标签:gesturedetector,手势,检测
0
投稿

猜你喜欢

  • Android开发实现判断通知栏是否打开及前往设置页面的方法

    2022-10-21 10:43:45
  • Bean实例化之前修改BeanDefinition示例详解

    2023-10-26 23:31:09
  • 全面了解java基本类型和封装类型的区别及应用

    2022-10-03 05:39:09
  • C#利用反射来判断对象是否包含某个属性的实现方法

    2023-02-26 06:57:52
  • html5在android中的使用问题及技巧解读

    2023-07-06 15:44:34
  • 基于Android AIDL进程间通信接口使用介绍

    2021-12-28 05:15:22
  • java实现创建临时文件然后在程序退出时自动删除文件

    2023-02-15 18:27:00
  • Netty如何设置为Https访问

    2021-12-06 02:00:40
  • Java使用POI导出Excel(二):多个sheet

    2022-11-26 02:09:44
  • android 实现按钮浮动在键盘上方的实例代码

    2022-12-21 11:32:33
  • 解析c#在未出现异常情况下查看当前调用堆栈的解决方法

    2023-05-18 02:54:04
  • elasticsearch节点的transport请求发送处理分析

    2022-04-05 22:38:08
  • Java 常见的限流算法详细分析并实现

    2022-01-05 22:11:09
  • SpringBoot 如何从容器中获取对象

    2023-12-06 08:20:40
  • SpringBoot集成mybatis实例

    2023-03-09 16:57:01
  • java使用Jsoup组件生成word文档

    2022-10-28 12:44:16
  • java用接口、多态、继承、类计算三角形和矩形周长及面积的方法

    2021-10-24 22:15:46
  • WPF中不规则窗体与WindowsFormsHost控件兼容问题的解决方法

    2022-09-26 12:47:19
  • Java中基于Shiro,JWT实现微信小程序登录完整例子及实现过程

    2023-07-05 15:01:42
  • c# WPF中的TreeView使用详解

    2021-05-24 15:17:58
  • asp之家 软件编程 m.aspxhome.com