1.为什么会有事件分发机制
安卓上面的View是树形结构的,View可能会重叠在一起,当我们点击的地方有多个View都可以响应的时候,这个点击事件应该给谁呢?为了解决这一个问题,就有了事件分发机制。
2.三个重要的事件分发的方法
(1). dispatchTouchEvent方法用于分发事件
(2). onInterceptTouchEvent方法用于拦截事件
(3). onTouchEvent方法用于处理事件
3.事件分发流程
Activity-PhoneWindow-DecorView-ViewGroup-...-view
顶级View接收到事件后,就会按照事件分发机制去分发事件。如果所有的view都不处理某个事件,即onTouchEvent返回false,那么这个事件最终会传递给Activity处理。
4.优先级:OnTouchListener>OnTouchEvent>OnClickListenser(onTouch->onTouchEvent->onClick)
- 当一个View需要处理事件时,如果它设置了OnTouchListener,那么OnTouchListener的onTouch方法会被回调。
- 这时事件如何处理还得看onTouch的返回值,如果返回false,则当前View的onTouchEvent方法会被调用;如果返回true,那么onTouchEvent方法将不会被调用。由此可见,给View设置的onTouchListener,其优先级比onTouchEvent要高。
- 如果当前方法中设置了onClickListener,那么它的onClick方法会被调用。可以看出,常用的OnClickListener,其优先级别最低。