事件分发:由上到下,递归一层一层向下传递
事件消耗:由下到上,如果我不消耗,则让上层 View 消耗。
一、源头
一切事件的源头都要从 Activity 出发。


再去看 PhoneWindow 如何处理。他又调用了 DecorView 的事件分发。

结合 Activity 布局分析,我们得知,最终是到了 ViewGroup 的事件分发

二、ViewGroup 事件分发
核心思想:首先判断是否拦截事件,如果不拦截,将事件逐一分发给 ViewGroup 的子 View,如果子 View 消耗事件,则事件被消耗;如果拦截事件,或未有子 View 消耗事件,则自己消耗。
1、事件拦截

2、寻找事件消耗者

3、事件消耗
根据前面是否找到事件消耗者,进行事件分发。


最后附一篇非常好的分析事件分发的博客 特别感谢 @carson_ho 老师
网友评论