android 事件传递机制

有三个方法:
dispatchTouchEvent
onInterceptTouchEvent
onTouchEvent

首先:A的dispatchTouchEvent-A的onInterceptTouchEvent
B的dispatchTouchEvent B的onInterceptTouchEvent 。。。
之后呢,如果不在传递了,那么就最后一个元素的onTouchEvent
往上传递,B的onTouchEvent –A的onTouchEvent

中间各个方法返回值不同,传递过程就会中断。总结如下:

dispatchTouchEvent  
不管是返回true, 还是false,都不会再走 自己的onInterceptTouchEvent  onTouchEvent  ,也不会向下传递 
只有返回super…..才可以继续 onInterceptTouchEvent  onTouchEvent
然后往下传递

如果返回true ,那么以后的事件都由dispatchTouchEvent   处理,不会再交给onTouchEvent  
如果返回false,那么以后的事件都由dispatchTouchEvent   处理,不会再交给上层 onTouchEvent ,不管上层返回truefalse,都要它处理。

onInterceptTouchEvent

就是配合dispatchTouchEvent  的,不想向下分发就拦截掉,直接执行自己的onTouchEvent
返回true  则接执行自己的onTouchEvent  不想向下分发
返回false 和返回super…..一样
onTouchEvent  

返回true  表示当前这个控件自己处理touch时间,包括以后的move  ,up ,传递过程中,如果上一级有其他的onTouchEvent  ,那么其他的只执行一次,以后直接分发到这一级之后直接调用onTouchEvent.
返回 false 和返回super  一样 ,自己不处理

这个事情我算是搞明白了,看了无数篇文章,最后搞明白还是自己动手写的demo,很简单的demo,以后知道了,想要获取一些真理,还是要动手实践来的正确。自己动手印象深刻。

以后这种事情,就自己动手去打断点,打log,去看。追求真理,追求知识,不要偷懒,不要嫌麻烦。

原文地址:https://www.cnblogs.com/caoxinyu/p/6647785.html