Android View的事件体系(二)——分发响应机制

2017-10-16  本文已影响16人  聽媽媽的话

所谓点击事件的事件分发,其实就是对MotionEvent事件的分发过程,即当一个MotionEvent产生了以后,系统需要把这个事件传递给一个具体的View的这个过程。点击事件的分发过程由三个很重要的方法共同完成:

用伪代码来表示三者的关系:

public boolean dispatchTouchEvent(MotionEvent ev) {
        boolean consume = false;
        if (onInterceptTouchEvent(ev)) {
            consume = onTouchEvent(ev);
        } else {
            consume = child.dispatchTouchEvent(ev);
        }

        return consume;
    }

简单描述一下点击事件的传递过程:
当一个点击事件产生后,它的的传递过程遵循如下吮吸:Activity->Window->顶级View,顶级View一般都是一个ViewGroup,接收到事件后,就按照事件分发机制去分发事件。
当ViewGroup接收到事件后,它的dispatchTouchEvent就会被调用,如果这个ViewGroup的onInterceptTouchEvent方法返回true,则表示它要拦截当前事件,接着事件就会交给这个ViewGroup处理,即它的onTouchEvent方法就会被调用,事件不再往下分发。如果这个ViewGroup的onInterceptTouchEvent方法返回false,就表示它不拦截当前事件,事件就会被传递到它的子元素去处理,如此反复直到事件被最终处理。具体流程如下:

界面示例.png 事件分发及响应流程.png

值得注意的是:

结合郭霖大神的源码解析,可以更清晰地理解View的分发响应机制:
Android事件分发机制完全解析,带你从源码的角度彻底理解(上)
Android事件分发机制完全解析,带你从源码的角度彻底理解(下)

上一篇下一篇

猜你喜欢

热点阅读