Android事件分发机制(最简图解:两张图搞明白)

借鉴自http://www.jianshu.com/p/e99b5e8bd67b

不过他写的有点多,这里就浓缩下(还有讲的不够全,等我看完源码再进行补充)


onTouchEvent中分为

ACTION_DOWN

ACTION_MOVE

ACTION_UP


先讲ACTION_DOWN

Android事件分发机制(最简图解:两张图搞明白)

dispatch就是分发事件。

不管是dispatch还是on,返回了true都是直接消费。返回了false都是向上传。返回了super都是按他们应该前往的方向传(dispatch是向下,on是向上)

activity的dispatch有所不同,返回false也是会消费,只有super才会向下分发。

onIntercept有点特殊,是ViewGroup的拦截机制,为了自己吃独食,不让view享用。如果true,就代表拦截成立,直接就跳转到ViewGroup的on了。

(这3句话理解了就能记住这幅图,建议看完后自己也去默画这个图)


ACTION_MOVE、ACTION_UP

其实ACTION_DOWN还是有私心的,像投名状的庞青云一样,他拥有的比ACTION_MOVE、ACTION_UP更多。

Android事件分发机制(最简图解:两张图搞明白)

我们都知道在哪里返回了true(intercept以外)都是打算自己消费掉,而ACTION_MOVE、ACTION_UP也会随之生效。但是这张图的目的是要读者明白,如果在onTouchEvent的时候返回了true,消费了事件,比如图中的ViewGroup2,那么他的ACTION_MOVE、ACTION_UP甚至不会继续向下分发,而是直接给他的onTouchEvent了。虽然没啥卵用,但是需要知道一下。


(最后建议看看我的demo,对这个图提出了异议)