Android事件分发机制总结
当我们去面试的时候,面试官都会问一问Android 里面的事件分发机制,如果要详细说的话估计没有几个能够完整的描述出来。
所以为了我自己也为了其他去面试的小伙伴,我也出来总结一下Android 里面的事件分发机制,起码这样回答能够得70分吧,
呵呵。
1. 只要你触摸到任何一个控件(或者说View),就一定会调用该控件的 dispatchTouchEvent 方法。
2. 然后事件分发中方法的调用顺序应该是dispatchTouchEvent -> onTouch -> onTouchEvent -> (onClick或者其他方法)。
3. 如果在onTouch方法中通过返回true将事件消费掉,onTouchEvent将不会再执行下去。
4. 如果你有一个控件是非enable的,那么给它注册onTouch事件将永远得不到执行。对于这一类控件,如果我们想监听它的touch事件,
就必须通过在该控件中重写onTouchEvent方法来实现。
5. ViewGroup 也是View的子类,只不过比起View,它多了可以包含子View和定义布局参数的功能。
6. 可在继承至ViewGroup的控件重写onInterceptTouchEvent方法来改变或者拦截传递給View的事件,如果返回true, 则不传递给View。
7.最重要的一点,Android中touch事件的传递,绝对是先传递到ViewGroup,再传递到View的。
8. 当你点击了某个控件,首先会去调用该控件所在布局的dispatchTouchEvent方法,然后在布局的dispatchTouchEvent方法中找到被点击的相应控件,
再去调用该控件的dispatchTouchEvent方法。
9. 整个ViewGroup事件分发过程,
10. 子View中如果将传递的事件消费掉,ViewGroup中将无法接收到任何事件。