ViewGroup 事件分发

2016-04-14  本文已影响69人  ivolianer

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

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 或其内部调用的其他函数,需要重新分析。 

上一篇下一篇

猜你喜欢

热点阅读