android事件分发 通俗易懂

2019-04-14  本文已影响0人  快感的感知

1.2 事件分发的本质

答:将点击事件(MotionEvent)传递到某个具体的View & 处理的整个过程

1.3 事件在哪些对象之间进行传递?

答:Activity、ViewGroup、View

1.4 事件分发的顺序

即 事件传递的顺序:Activity -> ViewGroup -> View

1.从上可知,要想充分理解Android分发机制,本质上是要理解:

1.1 Activity对点击事件的分发机制
MotionEvent

View触摸事件通过MotionEvent来表示,主要分为:
1、ACTION_DOWN:手指按下
2、ACTION_UP:手指抬起
3、ACTION_MOVE:手指移动
4、ACTION_CANCEL:非正常取消
activity事件分发源码

 public boolean dispatchTouchEvent(MotionEvent ev) {
        if (ev.getAction() == MotionEvent.ACTION_DOWN) {
            onUserInteraction(); (1)
        }
        //window的dispatchTouchEvent方法返回为true时,该方法返回true,否者执行onTouchEvent方法
        if (getWindow().superDispatchTouchEvent(ev)) { (2)
            return true;
        }
        return onTouchEvent(ev);
    }
1.2 ViewGroup对点击事件的分发机制
1.3 View对点击事件的分发机制

1.5 事件分发过程由哪些方法协作完成?

答:dispatchTouchEvent() 、onInterceptTouchEvent()和onTouchEvent()

完整图如下

966283-b9cb65aceea9219b.png

总结一下:

对于 dispatchTouchEvent,onTouchEvent,return true是终结事件传递。return false 是回溯到父View的onTouchEvent方法。
ViewGroup 想把自己分发给自己的onTouchEvent,需要拦截器onInterceptTouchEvent方法return true 把事件拦截下来。
ViewGroup 的拦截器onInterceptTouchEvent 默认是不拦截的,所以return super.onInterceptTouchEvent()=return false;
View 没有拦截器,为了让View可以把事件分发给自己的onTouchEvent,View的dispatchTouchEvent默认实现(super)就是把事件分发给自己的onTouchEvent。

上一篇 下一篇

猜你喜欢

热点阅读