Android 笔记 motionEvent 处理触摸事件
2016-10-07 12:57
337 查看
定义触摸事件
在处理触摸事件的时候,主要有两种启动方式1,
view.setOnTouchListener()
2,在自定义view/activity的时候覆盖一个方法
onTouchEvent()
这两种方法基本上等效,自定义的时候用方法2,其他时候用方法1。
注意一点,假如在activity里面设置
onTouchEvent(),有时候会不触发。因为如果此activity的子view能处理触摸事件,那么activity的触摸事件就会被忽略
所以,一般情况在VIEW里面定义触摸事件是最好的。
MotionEvent
MotionEventonTouchEvent(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动作里面获得目标点信息,启动一个移动动作,从初始点到目标点。最后需要把刚才的目标点定义为初始点。这样才能让移动动作一直执行下去。)
相关文章推荐
- Android的MotionEvent和事件处理
- 【Android View触摸事件(一)】Android常用触控类分析:MotionEvent 、 ViewConfiguration、VelocityTracker
- Android之触摸事件MotionEvent
- 【转】Android笔记:触摸事件的分析与总结----Touch事件分发方法dispatchTouchEvent()源码分析
- Android的触摸事件MotionEvent event
- 【Android View】Android中View对触摸事件的处理和传递dispatchTouchEvent、onInterceptTouchEvent
- Android触摸事件处理机制之requestDisallowInterceptTouchEvent
- android源码分析——事件输入流程MotionEvent事件处理流程
- Android_onDraw画圆与onTouchEvent方法处理触摸事件
- Android中触摸事件MotionEvent的来源
- Input事件输入系统之应用MotionEvent触摸事件处理流程
- Android 触摸事件的分发与处理流程:onInterceptTouchEvent和onTouchEvent
- Android事件处理之MotionEvent
- android各种触摸事件的处理,touchEvent
- Android键盘和触摸事件先后顺序处理
- android事件处理总结--dispatchTouchEvent
- Android键盘和触摸事件处理
- Android开发--事件的处理/按键按下,弹起,触摸事件等
- android onTouchEvent 左右手势滑动事件处理
- Android捕获touchEvent事件处理