Android的手势操作识别

手势识别控制鼠标和键盘 实现左右手的手势识别,并非触摸控制鼠标的移动和点击,以及键盘上下按键的控制。本项目使用了MediaPipe中的MediaPipe Hands模型以及python的AutoPy GUI工具包。MediaPipe是一款由 Google Research 开发并开源的多媒体机器学习模型应用框架。MediaPipe的核心框架由C++实现。MediaPipe Hands为MediaPipe中的手部识别模型,它是一种高保真手和手指跟踪解决方案,采用机器学习 (ML) 从单个帧中推断出手的21个3D地标。(1) Palm 阅读详情

转自:http://jcodecraeer.com/a/anzhuokaifa/androidkaifa/2012/1020/448.html


Android的手势操作识别

时间:2012-10-20 23:09  来源:未知  作者:admin  点击: 282 次

摘要 首先,在Android系统中,每一次手势交互都会依照以下顺序执行。 1. 接触接触屏一刹那,触发一个MotionEvent事件。 2. 该事件被OnTouchListener监听,在其onTouch()方法里获得该MotionEvent对象。 3. 通过GestureDetector(手势识别器)转发次MotionEvent对象

首先,在Android系统中,每一次手势交互都会依照以下顺序执行。

1. 接触接触屏一刹那,触发一个MotionEvent事件。

2. 该事件被OnTouchListener监听,在其onTouch()方法里获得该MotionEvent对象。

3. 通过GestureDetector(手势识别器)转发次MotionEvent对象至OnGestureListener。

4. OnGestureListener获得该对象,听根据该对象封装的的信息,做出合适的反馈。

这个顺序可以说就是手势交互的原理,下面一同来了解一下MotionEvent、GestureDetector和OnGestureListener。

MotionEvent: 这个类用于封装手势、触摸笔、轨迹球等等的动作事件。其内部封装了两个重要的属性X和Y,这两个属性分别用于记录横轴和纵轴的坐标。

GestureDetector: 识别各种手势。

OnGestureListener: 这是一个手势交互的监听接口,其中提供了多个抽象方法,并根据GestureDetector的手势识别结果调用相对应的方法。

下面我再通过一个切换图片的代码示例,演示一下手势交互的实现,让大伙对上面的执行顺序,以及各手势动作的区分有一个更加深刻的了解和记忆。

首先,提供一个只有ImageView的布局文件——main.xml。

1
2
3
4
5
6
7
8
9
10
11
<?xml version= "1.0" encoding= "utf-8" ?>
<LinearLayout xmlns:android= "http://schemas.android.com/apk/res/android"
android:orientation= "vertical"
android:layout_width= "fill_parent"
android:layout_height= "fill_parent" >
   
  <ImageView android:id= "@+id/image"
android:layout_width= "fill_parent"
android:layout_height= "fill_parent"
android:layout_gravity= "center" />
</LinearLayout>


然后,完成我们的Activity,因为要监听触摸屏的触摸事件和手势时间,所以该Activity必须实现OnTouchListener和OnGestureListener两个接口,并重写其中的方法。具体代码如下:


 
 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
public class MainActivity extends Activity implements OnTouchListener, OnGestureListener {
   
//创建一个用于识别收拾的GestureDetector对象waiyuwu.blogcn.com
private GestureDetector detector = new GestureDetector( this );
//定义一个数组,用于放漂亮的女孩
int[] girls = new int[]{R.drawable.girl1, R.drawable.girl2, R.drawable.girl3};
//定义数组下标,以方便观看各个女孩
private int index;
private ImageView image;
   
@Override
public void onCreate(Bundle savedInstanceState) {
super .onCreate(savedInstanceState);
setContentView(R.layout.main);
image = (ImageView)findViewById(R.id.image);
//设置一个初始显示的girl吧
image.setImageResource(girls[index]);
//监听这个ImageView组件上的触摸屏时间
image.setOnTouchListener( this );
//下面两个要记得设哦,不然就没法处理轻触以外的事件了,例如抛掷动作。
image.setLongClickable( true );
detector.setIsLongpressEnabled( true );
} //用于呼喊下一个女孩的方法
public void goNext(){
index++;
index = Math.abs(index % girls.length);
image.setImageResource(girls[index]);
}
   
//重写OnTouchListener的onTouch方法
//此方法在触摸屏被触摸,即发生触摸事件(接触和抚摸两个事件,挺形象)的时候被调用。
@Override
public boolean onTouch(View v, MotionEvent event) {
detector.onTouchEvent(event);
return true ;
}
   
//在按下动作时被调用
@Override
public boolean onDown(MotionEvent e) {
return false ;
}
   
//在抛掷动作时被调用
@Override
public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX,
float velocityY) {
//velocityX表示横向的移动,根据手指移动的方向切换女孩
if (velocityX < 0){
goNext();
} else if (velocityX > 0){
goPrevious();
}
return false ;
}
   
//用户呼唤上一个女孩的方法
public void goPrevious(){
index--;
index = Math.abs(index % girls.length);
image.setImageResource(girls[index]);
}
   
//在长按时被调用
@Override
public void onLongPress(MotionEvent e) {
}
   
//在滚动时调用
@Override
public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX,
float distanceY) {
return false ;
}
   
//在按住时被调用
@Override
public void onShowPress(MotionEvent e) {
}
   
//在抬起时被调用
@Override
public boolean onSingleTapUp(MotionEvent e) {
return false ;
}
}


 

在刚开始学Android的时候,就觉得Google的文档不咋样,在研究手势时,更加的感觉Google的文档写得实在是太差了。很多常量, 属性和方法,居然连个描述都没有。没有描述也就罢了,但是OnGestureListener里手势这么多,它也没有一个介绍说明,在没有进行不断才尝试 之前,谁能搞懂onLongPress和onShowPress,onScroll和onFling的关系与差别吗?Google真的需要在文档方面做一 次大手术了。不过好在经过鄙人不断反复的尝试。从个人的角度为这几个手势动作做出了定义。

  • 按下(onDown): 刚刚手指接触到触摸屏的那一刹那,就是触的那一下。

  • 抛掷(onFling): 手指在触摸屏上迅速移动,并松开的动作。

  • 长按(onLongPress): 手指按在持续一段时间,并且没有松开。

  • 滚动(onScroll): 手指在触摸屏上滑动。

  • 按住(onShowPress): 手指按在触摸屏上,它的时间范围在按下起效,在长按之前。

  • 抬起(onSingleTapUp):手指离开触摸屏的那一刹那。

除了这些定义之外,鄙人也总结了一点算是经验的经验吧,在这里和大家分享一下。

  • 任何手势动作都会先执行一次按下(onDown)动作。

  • 长按(onLongPress)动作前一定会执行一次按住(onShowPress)动作。

  • 按住(onShowPress)动作和按下(onDown)动作之后都会执行一次抬起(onSingleTapUp)动作。

  • 长按(onLongPress)、滚动(onScroll)和抛掷(onFling)动作之后都不会执行抬起(onSingleTapUp)动作。


PX4 Offboard模式实战避坑:为什么你的Gazebo无人机解锁了却飞不起来? 本文深入解析PX4 Offboard模式下Gazebo无人机解锁后无法起飞的关键原因,提供详细的故障排查流程和调试方法。重点解决MAVROS连接、setpoint消息频率、坐标系一致性等常见问题,帮助开发者快速掌握无人机控制核心技术。 阅读详情

相关推荐

Python pydub实现语音停顿切分

将pcm文件批量处理成wav文件 import wave import os filepath = "data/" # 添加路径 filename = os.listdir(filepath) # 得到文件夹下的所有文件名称 #f = wave.open(filepath + filename[1], 'rb') #print(filename) for i in range(len(fi...

wangqianqianya的博客 1万+

Android手势识别详解

一、使用GestureDetector进行手势识别 手势交互过程(原理): 1、触屏一刹那,触发MotionEvent事件 2、被OnTouchListener监听,在onTouch()中获得MotionEvent对象 3、GestureDetector转发MotionEvent对象至OnGestureListener 4、OnGestureListener获得该对象,根据该对象封装的信

小旭的专栏 4023

3款 433MHz 收发模块对比:SYN480R vs RXB6 vs DL-TX19,实测卷帘门遥控距离

本文深度评测了3款433MHz收发模块SYN480R、RXB6与DL-TX19在卷帘门遥控距离、穿透性能和抗干扰能力等方面的表现。通过实测数据对比,分析了超外差、超再生和PLL锁相环技术的优劣,为智能家居和工业控制领域的无线遥控方案选型提供专业参考。

weixin_30700977的博客 393

Android 手势操作GestureDetector

在很多应用中我们经常会看到一些不同手势的点击事件,例如QQ的消息列表,我们可以通过左滑消息来选择删除或者置顶或者标记为已读,我们也可以通过右滑拖出QQ菜单。有些应用中还会有长按,双击等手势。但是一般情况下,这些操作的手势都不是很复杂,不会出现什么右击左击,或者三连击这样的手势。因为开发应用的原则就是简单化,让别人可以一看就懂,一看就会。      今天我们就来学习一下Android中手势的操作。

To_be_Designer 3860

TPRI-DMP平台介绍

TPRI-DMP为华能集团西安热工院自主产权的工业云PaaS平台,已经过13年的发展和迭代,其具备大规模能源电力行业生产应用软件开发和运行能力

ashou706的专栏 2273

Outlook日历同步全攻略:Win10+安卓+iOS三端无缝衔接(附常见问题解决)

本文提供了一份详尽的Outlook日历同步指南,帮助用户在Windows 10、安卓和iOS三端实现无缝衔接。文章深入解析了Exchange ActiveSync等核心同步原理,并给出了从账户创建到各设备(特别是华为手机)的具体配置步骤、进阶管理技巧以及针对同步失败、事件重复等常见问题的实战解决方案,旨在彻底解决跨平台日程管理的痛点。

l3m4n的博客 552

android15种手势

1、单次触击(Touch): 一只手指按下,提起2、双次触击(Double Touch):两只手指按下,提起,其中一只手指按下,提起3、拖拽(Drag),轻滑(Swipe)和快掷(Fling): 一只手指按下,移动再提起4、长按:一只手指按下,稍后再提起5、长按拖动:一只手指按下后稍后,移动,再提起6、双触拖动:一只手指按下后提起,再按下后,拖动,再提起7、捏放(Pinch Open):双指...

qq_39636838的博客 3821

CNN经典网络模型(二):AlexNet简介及代码实现(PyTorch超详细注释版)

CNN经典网络模型之一:AlexNet,本文包含其简介及代码,在PyTorch中实现,进行超详细注释,适合新生小白阅读学习~

qq_43307074的博客 2万+

Android的手势操作(Gesture)

上一篇介绍的onTouch提供的事件还是相对较简单,如果需要处理一些复杂的手势,用这个接口就会很麻烦,因为我们要根据用户触摸的轨迹去判断是什么手势。幸好Android SDK给我们提供了GestureDetector类,通过这个类我们可以识别很多的手势,主要是通过他的onTouchEvent(event)方法完成了不同手势的识别。 GestureDetector这个类对外提供了两个接口和一个外部类

Watson的博客 3124

【机器人路径规划】基于改进型A*算法的机器人路径规划(Python代码实现)

本文针对传统A算法在机器人路径规划中存在的搜索效率低、路径不平滑等问题,提出了一种改进型A算法。该算法通过引入跳点搜索(JPS)技术优化子节点扩展方式,结合贝塞尔曲线或B样条曲线进行路径平滑处理,并采用动态启发式函数和自适应邻域搜索策略,显著提升了路径规划的效率和路径质量。实验结果表明,改进型A*算法在复杂环境下能有效减少搜索节点数量,缩短路径长度,提高路径平滑性,且具备动态避障能力。

2501_92867626的博客 1583

Python时间序列:PaddleTS-时间序列分类

评估的指标采用F1,Precision,Recall,PaddleTS已经基于TSDataset实现了这三个指标的计算,直接调用即可。使用内置的API:get_dataset加载BasicMotions数据集。模型训练完成之后,可以对测试集进行预测并评估。模型保存之后,可以加载模型用于新的数据预测。可以将训练完成的模型保存到指定路径。概率预测 可以返回每个分类的概率。安装paddlets。

斌擎科技 1292

android保存手势操作到文件&读取识别手势

android提供了用来识别和保存手势操作的仓库与绘图区,GestureLibrary与GestureOverlayView,利用它们可以很简单的实现保存手势与识别手势。 加载文件中手势: gestureLib = GestureLibraries.fromFile(path);//实例手势仓库 gestureLib.load()//加载手势集合  识别手势: gestureOverla...

FairyLaw的博客 835

【YOLOv11工业级实战】27. TensorRT量化实战:FP16/INT8极致加速!边缘设备YOLOv11推理速度提升4倍,精度损失控制在1.5%内

摘要:本文针对智慧园区200路摄像头实时分析的工业痛点——RTX 3080单卡仅能处理12路视频流(YOLOv11-nano FP32精度45FPS,需≥120FPS且精度损失≤3%),提供TensorRT量化完整解决方案。从原理解析(FP16/INT8精度差异与量化逻辑)到实操落地(ONNX转换、FP16引擎构建、INT8精细校准),全程给出可复用代码。实测显示:FP16量化后速度达128FPS(×2.8),精度损失0.2%。

专注于人工智能、软件开发、工控自动化、工厂数字化及智能化等领域,希望和大家共同进步! 1720

Android 手势操作识别

(转自:http://jcodecraeer.com/a/anzhuokaifa/androidkaifa/2012/1020/448.html) 首先,在Android系统中,每一次手势交互都会依照以下顺序执行。1. 接触接触屏一刹那,触发一个MotionEvent事件。2. 该事件被OnTouchListener监听,在其onTouch()方法里获得该MotionEvent对象。3...

angen3675的博客 120

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

android手势操作吗,Android的手势操作识别 ()

摘要首先,在Android系统中,每一次手势交互都会依照以下顺序执行。 1. 接触接触屏一刹那,触发一个MotionEvent事件。 2. 该事件被OnTouchListener监听,在其onTouch()方法里获得该MotionEvent对象。 3. 通过GestureDetector(手势识别器)转发次MotionEvent对象首先,在Android系统中,每一次手势交互都会依照以下顺序执行...

weixin_33533854的博客 196

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

【Android游戏开发十六】Android Gesture之【触摸屏手势识别】操作!

本站文章均为李华明Himi原创,转载务必在明显处注明: 转载自【黑米GameDev街区】原文链接:http://www.himigame.com/android-game/337.html 本文补充:网上很多关于手势文章都说Android 对手势的支持是从SDK 1.6 (也就是 API 4)才开始的,但是我用SDK1.5模拟器也能识别!。(本想测试...

weixin_33755847的博客 76

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

【Android游戏开发十六】Android Gesture之【触摸屏手势识别】操作!利用触摸屏手势实现一个简单切换图片的功能!...

Himi 原创, 欢迎转载,转载请在明显处注明! 谢谢。 原文地址:http://blog.youkuaiyun.com/xiaominghimi/archive/2011/01/12/6130196.aspx 本文补充:网上很多关于手势文章都说Android 对手势的支持是从SDK 1.6 (也就是 API 4)才开始的,但是我用SDK1.5模拟器也能识别!。(本想测试下更低的SDK的支持效果,但是我没...

iteye_20730的博客 119

Android中添加和识别手势操作

实现思路:将手势写入GestureLibrary中,对其他手势进行匹配对比,进行识别 现在布局中加入GestureOverlayView组件 <android.gesture.GestureOverlayView android:id="@+id/add_gesture" android:layout_width="match_parent" andr

啦啦啦啦 la 2558
上一篇: GestureDetector类及其用法
下一篇: Android 屏幕手势滑动中onFling()函数的技巧分析
comikey
博客等级 码龄19年 17粉丝 11原创
评论 9
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值