关于android事件分发机制

首先插几个图关于android事件分发机制_第1张图片关于android事件分发机制_第2张图片关于android事件分发机制_第3张图片

 
  

下面是一个总体概括:

  1. 事件由Activity的dispatchTouchEvent()开始,将事件传递给当前的Activity的根ViewGroup:mDecorView,事件自上而下传递,直到被消费。

  2. 事件分发到ViewGroup时,调用dispatchTouchEvent()进行分发处理。首先会被ViewGroup的onInterceptTouchEvent()拦截。如果onInterceptTouchEvent 返回false,则开始遍历ViewGroup中的子View,将事件依次发给子View,若事件被某个子View消费了,将不再继续分发;如果onInterceptTouchEvent返回true,事件由ViewGroup自己处理。ViewGroup通过调用子View中的mOnTouchLisenter事件得到onTouchEvent的返回值。当这个返回值为true时,自己消费;否则将事件回传到Activity中,最后事件结束。

  3. 当事件分发到View层的时候,事件传递到View的dispatchTouchEvent() ,首先会判断OnTouchListener是否存在,倘若存在,则执行onTouch(),若onTouch()未对事件进行消费,事件将继续交由onTouchEvent处理,根据上面分析可知,View的onClick事件是在onTouchEvent的ACTION_UP中触发的,因此,onTouch事件优先于onClick事件。

  4. 事件在自上而下的传递过程中一直没有被消费,而且最底层的子View也没有对其进行消费,事件会反向向上传递,此时,父ViewGroup可以对事件进行消费,若仍然没有被消费的话,最后会回到Activity的onTouchEvent。


你可能感兴趣的:(关于android事件分发机制)