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


猜你喜欢
- 什么是FTPFTP(File Transfer Protocol)是TCP/IP网络上两台计算机传送文件的协议,使得主机间可以共享文件.可以
- 主要功能共有三个角色:管理员、教师、学生。管理员功能有:学生管理、教师管理、评教管理、指标管理、课程管理等。教师功能有:学生管理、指标管理、
- 本文为大家分享的java算法计算阶乘,在学习Java课程时经常会遇到求阶乘问题,今天接跟大家一起探讨一下代码如下:package com.x
- import java.util.Arrays;/** * 栈的实现<br> * @author Skip&
- 前言在《C# wpf Canvas中实现控件动态调整大小》中我们实现了Canvas中的控件动态调整大小,由于Grid也是可层叠布局,在Gri
- 发现问题:问题如图所示,在eclipse中开启tomcat服务器时报错:端口已被占用。这是因为在tomcat开启的状态下,eclipse异常
- 最近由于编程的需要,对 C# 的类型转换做了一些研究,其内容涉及 C# 的装箱/拆箱/别名、数值类型间相互转换、字符的 ASCII 码和 U
- Hutool Java工具类库_ExcelUtil依赖<!--Hutool Java工具包--> &l
- 一、CAS(Compare And Set)Compare And Set(或Compare And Swap),CAS是解决多线程并行情况
- 这两天看阿里的JAVA开发手册,到多线程的时候说永远不要用 new Thread()这种方式来使用多线程。确实是这样的,我一直在用线程池,到
- 本文实例为大家分享了Android仿iphone自定义滚动选择器的具体代码,供大家参考,具体内容如下一、多的不说,效果图,先走起二、实例源码
- 本文实例讲述了Android播放assets文件里视频文件相关问题。分享给大家供大家参考,具体如下:今天做了一个功能,就是播放项目工程里面的
- 按照常规思维,往一个map里put一个已经存在的key,会把原有的key对应的value值覆盖,然而通过一次线上问题,发现Java8中的Co
- 前言Android6.0代号棉花糖。尽管是在15年I/O大会上Google被正式发布的了。但是看看大多数人的项目中大家的 targetSdk
- 在项目中,分页是一个项目中必不可少的,它可以防止我们从数据库中进行大量数据查询时速度变慢,提高我们的查询效率。1、定义分页模型:PageMo
- 前言gps定位服务的学习是这段时间gps课程的学习内容,之前老师一直在将概念,今天终于是实践课(其实就是给了一个案例,让自己照着敲).不过在
- 前言 用过微信的都知道,微信对话列表滑动删除效果是很不错的,这个效果我们也可以有。思路其实很简单,弄个ListView,然后里面的
- 前言:在 Java 中,常用的锁有两种:synchronized(内置锁)和 ReentrantLock(可重入锁),二者的功效都是相同得,
- 说明使用工具:brew caskbrew cask是一个用命令行管理Mac下应用的工具,提供了自动安装和卸载功能,能够自动从官网上下载并安装
- 用Flutter实现弹幕功能,轻松实现虎牙、斗鱼的弹幕效果。先来一张效果图:实现原理弹幕的实现原理非常简单,即将一条弹幕从左侧平移到右侧,当