Android事件分发机制(最简图解:两张图搞明白)
借鉴自http://www.jianshu.com/p/e99b5e8bd67b
不过他写的有点多,这里就浓缩下(还有讲的不够全,等我看完源码再进行补充)
onTouchEvent中分为
ACTION_DOWN
ACTION_MOVE
ACTION_UP
先讲ACTION_DOWN
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更多。我们都知道在哪里返回了true(intercept以外)都是打算自己消费掉,而ACTION_MOVE、ACTION_UP也会随之生效。但是这张图的目的是要读者明白,如果在onTouchEvent的时候返回了true,消费了事件,比如图中的ViewGroup2,那么他的ACTION_MOVE、ACTION_UP甚至不会继续向下分发,而是直接给他的onTouchEvent了。虽然没啥卵用,但是需要知道一下。
(最后建议看看我的demo,对这个图提出了异议)