详情参考
http://www.jianshu.com/p/e99b5e8bd67b
个人认为这一篇长文是最详细的说明图,这里只说结果流程,唯一的缺憾是缺少源码原理的支持。总结如下:
ACTION_DOWN事件,哪个View的onTouchEvent 返回true,哪个view消费此down事件,但是需要逐层传递,直到找到消费点。而时候的move和up时间直接找到消费点,相当于走了捷径,走捷径的原因就是down事件在前面探路了,直接返回了true。
onTouchEvent消费事件的情况:在哪个View的onTouchEvent 返回true,那么ACTION_MOVE和ACTION_UP的事件从上往下传到这个View后就不再往下传递了,而直接传给自己的onTouchEvent 并结束本次事件传递过程。
对于ACTION_MOVE、ACTION_UP总结:ACTION_DOWN事件在哪个控件消费了(return true), 那么ACTION_MOVE和ACTION_UP就会从上往下(通过dispatchTouchEvent)做事件分发往下传,就只会传到这个控件,不会继续往下传,如果ACTION_DOWN事件是在dispatchTouchEvent消费,那么事件到此为止停止传递,如果ACTION_DOWN事件是在onTouchEvent消费的,那么会把ACTION_MOVE或ACTION_UP事件传给该控件的onTouchEvent处理并结束传递。