android事件分发机制

一、android事件分发首先从 MotionEvent.ACTION_DOWN 事件开始,ACTION_DOWN 事件的分发流程如下图:

图1

二、MotionEvent.ACTION_UP事件分发会受到ACTION_DOWN事件分发结果的影响。我们把ACTION_DOWN事件中止向下分发处当作一个节点,如上图,可能的节点有6个。android事件分发具有消费机制,在这6个节点中按照消费对象来分又可以分为三类:
  • 16对应消费者为Activity,
  • 25对应消费者为ViewGroup,
  • 34对应消费者为View。

通常情况下,如果一个对象消费了ACTION_DOWN事件,android系统会认为这个对象可能也会消费ACTION_UP事件。相对的如果一个对象没有消费ACTION_DOWN事件,那么android系统会认为这个对象也不会消费ACTION_UP事件,在ACTION_UP事件传递过程中就会跳过这个对象。
以下根据这3类情况来探讨ACTION_UP事件的分发流程。

1、ACTION_DOWN事件被Activity消费时,ACTION_UP的分发流程如下:

图2

2、ACTION_DOWN事件被ViewGroup消费时,ACTION_UP的分发流程如下:

图3

3、ACTION_DOWN事件被View消费时,ACTION_UP的分发流程如下:

图4

测试工程稍后会放到Github上,欢迎follow