您的位置:首页 > 移动开发 > Android开发

Android 笔记 motionEvent 处理触摸事件

2016-10-07 12:57 337 查看

定义触摸事件

在处理触摸事件的时候,主要有两种启动方式

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动作里面获得目标点信息,启动一个移动动作,从初始点到目标点。最后需要把刚才的目标点定义为初始点。这样才能让移动动作一直执行下去。)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息