Android 笔记 motionEvent 处理触摸事件

本文详细介绍了Android中处理触摸事件的方式,包括在自定义View或Activity中覆盖方法。重点解析了MotionEvent对象,强调了ACTION_DOWN、ACTION_UP、ACTION_POINTER_DOWN、ACTION_POINTER_UP和ACTION_MOVE等触摸事件。此外,还探讨了如何获取触摸点信息,如编号、坐标,并提醒开发者在处理多点触摸时,ACTION_MOVE可能会频繁触发,需谨慎定义移动操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

定义触摸事件

在处理触摸事件的时候,主要有两种启动方式
1,view.setOnTouchListener()
2,在自定义view/activity的时候覆盖一个方法onTouchEvent()
这两种方法基本上等效,自定义的时候用方法2,其他时候用方法1。

注意一点,假如在activity里面设置onTouchEvent(),有时候会不触发。因为如果此activity的子view能处理触摸事件,那么activity的触摸事件就会被忽略
所以,一般情况在VIEW里面定义触摸事件是最好的。

MotionEvent

MotionEvent
onTouchEvent(MotionEvent event){}在方法体里面要对event进行判断,是哪一种触摸模式,然后可以从这个event里面获得各种信息
event.getAction()可以获得所有信息,包括触摸模式,触摸点索引,也就是以下两种信息
event.getActionMasked()获得触摸模式信息
event.getActionIndex()获得当前触摸点的索引

一般情况用后面两种分开的信息,第一种包含后面两种信息。后面两种则通过掩码的方法获得特定信息,这样做的好处是节省内存,提高处理效率。
所以,大部分时候我们使用后两种来处理。

Action类别

ACTION_DOWN ( 第一个触摸点触摸事件)
ACTION_UP ( 最后一个触摸点离开事件)
ACTION_POINTER_DOWN (第二个以及以后的触摸点触摸事件,也就是多点触摸)
ACTION_POINTER_UP (第二个以及以后的触摸点离开事件)
ACTION_MOVE (所有的触摸点的移动事件,包括单点的和多点的)

目前为止我就接触到以上事件。要注意的是这里面多点和单点的触摸事件是分开的。
除了MOVE以外。MOVE事件在任何移动的时候都会触发,所以需要通过代码判断是多点还是单点。

触摸信息

getActionIndex()获得触摸点编号,从0开始,多点触摸的时候,获得的就是当前动作点的编号
比如第二个点触摸,就获得第二个点的编号;第二个点离开,也是第二个点的编号,以此类推。
getX(index)获得对应编号触摸点的X坐标,Y坐标类似,假如没有参数,那就获得的是编号0的点的信息

需要注意一点,多点触摸的时候,一般按照触摸顺序获得从0开始的编号,如果中间某个点离开,再重新触摸,会获得原来的编号,而不是从最后一个编号往上加。但是比如3点触摸,第一个点离开,编号就是0,第二个点离开,显示编号也是0。

总之,我不好总结触摸点的编号规律,但是通过getActionIndex()总能获得当前动作的编号,所以,每次都要通过这个方法获得动作编号,不要特么的乱猜。

补充

基本上以上信息就可以获得大部分应用的操作的。
有一点需要补充就是,可能因为对触摸动作比较敏感,
MOVE动作很频繁,即便你以为手指是没动的情况也可能一直在触发MOVE动作

所以,定义MOVE动作一定要谨慎。
(一个小例子,定义移动动作的时候,在ACTION_DOWN动作下获得初始移动点的信息,然后在MOVE动作里面获得目标点信息,启动一个移动动作,从初始点到目标点。最后需要把刚才的目标点定义为初始点。这样才能让移动动作一直执行下去。)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值