有关View事件分发的面试回答

面试:简述view的事件分发机制?

说真的在遇到这问题时候其实我也不太清楚,我也不知道该如何回答,现就将自己所知道的一点点写出来大家补充补充。

首先你需要知道的是:

只要你触摸到了任何一个控件,就一定会调用该控件的dispatchTouchEvent方法。

而dispatchTouchEvent方法是有返回值的,具体看源码:

有关View事件分发的面试回答_第1张图片
(只要我们给控件注册了touch事件,mOnTouchListener就一定被赋值了,按钮是否可用,默认为可用,因此条件恒成立,判断touch 事件返回 true 。如果三者都成立将返回true,否则执行onTouchEvent 事件)

也就是说:触发到dispatchTouchEvent 事件后,先执行onTouch 事件,(所以onTouch事件高于onClick)如果onTouch返回了true,dispatchTouchEvent返回了true,onClick 事件将不再执行。而onClick事件的执行是在onTouchEvent 中,所以说:

onTouch优先于onTouchEvent执行。如果在onTouch方法中通过返回true将事件消费掉,onTouchEvent将不会再执行,当然onClick也不执行了。

我就理解了这么点 也不知道怎么 更好的组织语言,大家来回答回答吧!

你可能感兴趣的:(有关View事件分发的面试回答)