ViewGroup 事件分发

单纯的知识是无力的,需要灵活运用,转化为实际的开发经验。


ViewGroup 的事件分发非常复杂的,这里略过了多点触控的部分。

详细的可以看:

http://wangkuiwu.github.io/2015/01/04/TouchEvent-ViewGroup/


第一,重置状态。


接收 DOWN 事件时,如果 TouchTarget 不为 null,则向 TouchTarget 发送 CANCEL 事件,并则将其重置为 null。

一般来说,接收到新的 DOWN 事件时, TouchTarget 应该已经被重置为 null 了。

但不排除父视图拦截了 UP 事件的可能性(或其他情况)。

重置状态是为确保上一次 touch gesture 不会影响到接下来的一系列操作。


第二 ,拦截判断


如果没有子视图消费 DOWN 事件(即 TouchTarget 为 null,无论是被父视图拦截了,还是没可以消费该事件的子视图,又或者明明接收了事件并做出相应的处理,最终却返回个 false),那么后续事件会被分发给父视图。

如果 TouchTarget 不为 null,后续事件会被分发给 TouchTarget 处理,事件相对坐标可能有所变化。


第三,别记结论。


以上只是使用 ViewGroup 默认 dispatchTouchEvent 的结论。

如果重载了 dispatchTouchEvent 或其内部调用的其他函数,需要重新分析。 

你可能感兴趣的:(ViewGroup 事件分发)