android 事件分发笔记

260 阅读2分钟
       第一次写笔记,也不会用这个编辑器,暂时先写纯文本形式吧.本篇不是源码分析,也不是代码演示.仅仅是方便记忆的笔记,文中的结论大家如有疑问可以自行论证.

       事件分发的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被消费或者丢失.