第一次写笔记,也不会用这个编辑器,暂时先写纯文本形式吧.本篇不是源码分析,也不是代码演示.仅仅是方便记忆的笔记,文中的结论大家如有疑问可以自行论证.
事件分发的3个方法 : dispatchTouchEvent,onInterceptTouchEvent,onTouchEvent.
(1)事件首先会传递到activity,在activity中只有dispatchTouchEvent和onTouchEvent.
- 当activity的dispatchTouchEvent返回true或false,事件传递中断,不会再向下传递.
- 当activity的dispatchTouchEvent返回super.dispatchTouchEvent(ev),事件会按照视图树传递到子ViewGroup.
(2)接着分析ViewGroup,在ViewGroup中有dispatchTouchEvent,onInterceptTouchEvent
,onTouchEvent这三个方法.当事件传递到ViewGroup时会首先调用dispatchTouchEvent,这时候要分3种情况考虑,
- 当dispatchTouchEvent返回值为true,事件中断,不会向下传递,也不会回传到activity
- 当dispatchTouchEvent返回值为false,事件不会向下传递,会回传到activity的onTouchEvent处理
- 当dispatchTouchEvent返回值为super.dispatchTouchEvent(ev),会调用onInterceptTouchEvent,此时也要分为2种情况:
1>当onInterceptTouchEvent返回true,会调用onTouchEvent进行处理事件.
onTouchEvent返回true则事件被消费,onToucher返回false会回传到上级viewgroup或activity
2>当onInterceptTouchEvent返回super或false,会将事件传递到子View的dispatchTouchEvent.
(3) 最后分析VIew,View中只有dispatchTouchEvent和onTouchEvent,当事件传递到View时,会首先调用dispatchTouchEvent,此时也要分3种情况考虑,
- 当dispatchTouchEvent返回值为true,事件中断,不会调用onTouchEvent处理,也不会向上回传.
- 当dispatchTouchEvent返回值为false,事件不会向下传递,会回传到上级viewgroup的onTouchEvent.
- 当dispatchTouchEvent返回值为super.dispatchTouchEvent(ev),会调用onTouchEvent处理事件,若onTouchEvent返回true,则事件被消费,若onTouchEvent返回false或super会回传到上级ViewGroup.上级ViewGroup若还是不处理,则最终会回传到activity被消费或者丢失.