美文网首页
事件分发机制

事件分发机制

作者: SlideException | 来源:发表于2018-04-10 11:53 被阅读0次

链接:https://www.jianshu.com/p/e99b5e8bd67b

图分三层,从上往下依次 activity,viewgroup,view

1.事件从start开始传递,由activity的dispatchTouchEvent做分发;

2.箭头上面的字代表方法返回值,return true false super

3.dispatchTouchEvent和onTouchEvent里的true—>消费,表示如果方法返回true,则该事件被消费,就不往下传递了,事件终止。

4.针对的是action_down

dispatchTouchEvent 和 onTouchEvent 一旦return true,事件就停止传递了(到达终点)(没有谁能再收到这个事件)。看下图中只要return true事件就没再继续传下去了,对于return true我们经常说事件被消费了,消费了的意思就是事件走到这里就是终点,不会往下传,没有谁能再收到这个事件了

dispatchTouchEvent 和 onTouchEvent return false的时候事件都回传给父控件的onTouchEvent处理。

对于dispatchTouchEvent 返回 false 的含义应该是:事件停止往子View传递和分发同时开始往父控件回溯(父控件的onTouchEvent开始从下往上回传直到某个onTouchEvent return true),事件分发机制就像递归,return false 的意义就是递归停止然后开始回溯。

对于onTouchEvent return false 就比较简单了,它就是不消费事件,并让事件继续往父控件的方向从下往上流动。

onInterceptTouchEvent 的作用

Intercept 的意思就拦截,每个ViewGroup每次在做分发的时候,问一问拦截器要不要拦截(也就是问问自己这个事件要不要自己来处理)如果要自己处理那就在onInterceptTouchEvent方法中 return true就会交给自己的onTouchEvent的处理,如果不拦截就是继续往子控件往下传。默认是不会去拦截的,因为子View也需要这个事件,所以onInterceptTouchEvent拦截器return super.onInterceptTouchEvent()和return false是一样的,是不会拦截的,事件会继续往子View的dispatchTouchEvent传递

相关文章

网友评论

      本文标题:事件分发机制

      本文链接:https://www.haomeiwen.com/subject/gzzthftx.html