View的事件分发机制

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

  1. 当一个View需要处理事件时,如果它设置了OnTouchListener,那么OnTouchListener的onTouch方法会被回调。
  2. 这时事件如何处理还得看onTouch的返回值,如果返回false,则当前View的onTouchEvent方法会被调用;如果返回true,那么onTouchEvent方法将不会被调用。由此可见,给View设置的onTouchListener,其优先级比onTouchEvent要高。
  3. 如果当前方法中设置了onClickListener,那么它的onClick方法会被调用。可以看出,常用的OnClickListener,其优先级别最低。
阅读更多
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页