Android Notes(06) - Touch事件分发响应机制
2014-04-06 22:05
375 查看
发布在我的网站,请访问http://hukai.me/blog/android-notes-06-touch-event-dispatch-process/
1)概述
Android的TouchEvent通常包含三个动作,ACTION_DOWN,ACTION_MOVE与ACTION_UP。发出的顺序是DOWN->MOVE->MOVE->…->UP(注意MOVE事件是否能够被触发取决于操作手势里面是否包含了移动的动作)。消息分发流程,从上到下,从父到子:Activity->ViewGroup1->ViewGroup1的子ViewGroup2->…->Target View
消息响应流程,从下到上,从子到父:Target View->…->ViewGroup1的子ViewGroup2->ViewGroup1->Activity
public boolean dispatchTouchEvent(MotionEvent ev);
事件分发处理函数,通常会在Activity层根据UI的显示情况,把事件传递给相应的ViewGroup。下面的演示代码中,为了方便模拟,会直接return true,解说中称之为“丢弃”。(因为事件实际上没有传递给任何组件,没有被消费,而且是主动的行为,故称之为丢弃)
public boolean onInterceptTouchEvent(MotionEvent ev);
对分发的事件进行拦截,注意拦截ACION_DOWN与其他ACTION的差异。
第1种情况:如果ACTION_DOWN的事件没有被拦截,顺利找到了TargetView,那么后续的MOVE与UP都能够下发。如果后续的MOVE与UP下发时还有继续拦截的话,事件只能传递到拦截层,并且发出ACTION_CANCEL。
第2种情况:如果ACITON_DOWN的事件下发时被拦截,导致没有找到TargetView,那么后续的MOVE与UP都无法向下派发了,在Activity层就终止了传递。
public boolean onTouchEvent(MotionEvent ev);
响应处理函数,如果有设置对应listener的话,这里还会与onTouch,onClick,onLongClick有关联。具体执行顺序是onTouch()->onTouchEvent()->onClick()->onLongClick()。是否能够顺序执行,取决于每个方法的返回值是true还是false。具体这里不展开说。
强关注点:dispatch与intercept的差异,ACTION_DOWN与其他ACITON会对寻找target组件带来差异,而是否寻找到Target组件对整个流程有着重大的的影响。
查看更多请点击:http://hukai.me/blog/android-notes-06-touch-event-dispatch-process/
相关文章推荐
- Android Deeper(00) - Touch事件分发响应机制
- Android Touch事件的分发响应机制
- Android 编程下 Touch 事件的分发和响应机制 分类: Android 2015-07-02 17:35 12人阅读 评论(0) 收藏
- Android 编程下 Touch 事件的分发和响应机制
- Android开发-Touch事件分发响应机制
- Android Touch事件分发响应机制
- Android Touch事件分发响应机制
- Android:Touch事件分发机制
- Android 编程下 Touch 事件的分发和消费机制(二)
- Android,Touch事件分发机制。
- Android Touch事件的分发和消费机制
- Android Touch事件分发机制学习
- Android Touch 事件的分发和消费机制
- Android 编程下 Touch 事件的分发和消费机制
- Android 编程下 Touch 事件的分发和消费机制
- Android 编程下 Touch 事件的分发和消费机制
- 深入源码理解Android Touch事件分发机制(上篇)
- android touch事件分发机制的探究
- Android 编程下 Touch 事件的分发和消费机制
- (4.4.14)Android:30分钟弄明白Touch事件分发机制