学事件分发是为了什么呢?还不是为了解决滑动冲突的。
实际上,如果仅仅是为了解决滑动冲突的,大可不必看源码,只需要掌握事件分发的外在规律即可。
只要记住这张图,再明白内部拦截法和外部拦截法,滑动冲突这一块,都可以轻松解决了。
分享一个非常好的滑动冲突的实例:http://blog.csdn.net/qq_36523667/article/details/78825810
只需要掌握上述的内容,事件分发再无难题了。
但是,如果想掌握的更通透一点,源码是不可或缺的。因为源码里还有很多细节,enable?clickable?performClick?。。。
最重要的一个问题,如果在自定义一个view的时候,onTouchEvent返回了true,代表是消费这系列事件。而且onTouchEvent不会再调用父容器的onTouchEvent;如果返回false,会转而调用父容器的onTouchEvent。这个问题是事件分发的核心问题,可是在源码中哪里有答案???
在view group里有一段核心的代码
for (int i = childrenCount - 1; i >= 0; i--) {...
// Dispatch to touch targets. if (mFirstTouchTarget == null) { // No touch targets so treat this as an ordinary view. handled = dispatchTransformedTouchEvent(ev, canceled, null, TouchTarget.ALL_POINTER_IDS); } else { // Dispatch to touch targ