Android的触摸事件传递分析
2017-04-20 10:02
429 查看
Android的触摸事件传递分析
Android的触摸事件总是传递到Activity的根视图DecorView,DecorView再进行分发。在一组连续的触摸事件中,
MotionEvent.ACTION_DOWN代表TouchEvent的开始,传递进
DecorView.dispatchTouchEvent,并且后续的所有MotionEvent都将传递进
DecorView.dispatchTouchEvent来分发。
DecorView.dispatchTouchEvent实际上调用父类ViewGroup的dispatchTouchEvent方法。
知识点一、ViewGroup对MotionEvent.ACTION_DOWN事件的处理可如下描述:
ViewGroup.dispatchTouchEvent将调用
onInterceptTouchEvent试图拦截
MotionEvent.ACTION_DOWN,拦截成功的话进入步骤3,否则进入步骤2;
ViewGroup.dispatchTouchEvent根据
MotionEvent.ACTION_DOWN的位置遍历子控件view children,并把
MotionEvent.ACTION_DOWN传递给childView的
View.dispatchTouchEvent。如果有childView的
View.dispatchTouchEvent返回true那这个childView就被记为TouchTarget,
ViewGroup.dispatchTouchEvent也返回true。如果没有找到TouchTarget,则进入步骤3;
ViewGroup.dispatchTouchEvent把
MotionEvent.ACTION_DOWN传递给父类View的
View.dispatchTouchEvent,并返回
View.dispatchTouchEvent的返回值。
知识点二、DecorView对MotionEvent.ACTION_DOWN事件的处理:
DecorView对MotionEvent.ACTION_DOWN的处理过程基本就是上述3个步骤,实际的处理结果如下:由于DecorView是根视图只负责触摸事件分发,上述步骤1总是失败而步骤3总是返回false。
如果步骤2没有找到TouchTarget,那后续的MotionEvent.ACTION_MOVE、MotionEvent.ACTION_UP、MotionEvent.ACTION_CANCEL只会传递到
DecorView.dispatchTouchEvent并且不会再分发。
如果步骤2找到TouchTarget,那后续的MotionEvent都会传递到这个TouchTarget。
三、MotionEvent.ACTION_DOWN事件在DecorView内View和ViewGroup的传递过程分析:
基于以上两点,MotionEvent.ACTION_DOWN事件实际上是在DecorView内的View和ViewGroup传递,我们把知识点一步骤2遍历view children过程中的子控件记为PotentialTarget,那么知识点一步骤2可以分解成:如果PotentialTarget是ViewGroup的子类,那么PotentialTarget的
dispatchTouchEvent将重复知识点一的3个步骤,否则进入步骤2;
PotentialTarget的
dispatchTouchEvent返回
onTouchEvent的返回值;
四、MotionEvent.ACTION_DOWN之后的触摸事件在DecorView内View和ViewGroup的传递过程分析:
(To be done)相关文章推荐
- Android触摸事件传递机制简要分析
- Android O: 触摸事件传递流程源码分析(下)
- Android O: 触摸事件传递流程源码分析(上)
- 深入分析Android触摸事件
- android ontouch事件传递分析与指南
- Android 控件的触摸事件传递与处理
- Android 触摸事件传递机制
- Android webkit 事件传递流程通道分析
- Android触摸事件传递
- Android笔记:触摸事件的分析与总结----TouchEvent处理机制
- Android好奇宝宝_08_乱侃触摸事件传递
- iOS 和 Android 触摸事件传递
- Android中触摸事件传递过程
- 关于Android触摸事件TouchEvent的传递及截取,研究心得。
- Android 触摸事件传递流程解析
- android触摸事件传递
- android触摸事件传递机制以及onInterceptTouchEvent()和onTouchEvent()总结
- Android: 详解触摸事件如何传递
- Android笔记:触摸事件的分析与总结----MotionEvent对象 推荐
- Android webkit 事件传递流程通道分析