android 事件分发机制

Posted maozs

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了android 事件分发机制相关的知识,希望对你有一定的参考价值。

android事件分发机制中有下面三个重要方法:

dispatchTouchEvent()  
onInterceptTouchEvent()
onTouchEvent()

 

对于接受到的事件先是通过dispatchTouchEvent()方法来处理,不过View和ViewGroup的处理方式稍有不同。

源码较为复杂,我们可以将其简化来看,不过简化方法只是在部分情况下适用:

下面为简化后的ViewGroup中的dispatchTouchEvent()方法:

    public boolean dispatchTouchEvent(Motion e) {
        boolean result = false;
        if (onInterceptTouchEvent(e)) {
            result = onTouchEvent(e);
        } else {
            result = child.dispatchTouchEvent(e);
        }
        return result;
    }

 

下面为简化后的View中的dispatchTouchEvent()方法:

    public boolean dispatchTouchEvent(MotionEvent event) {
        if (mOnTouchListener.onTouch(this, event)) {
            return true;
        }
        return onTouchEvent(event);
    }

从ViewGroup的dispatchTouchEvent方法中,我们不难看出事件是从父布局向子布局传递,层层递进。

首先,ViewGroup得到事件后,由dispatchTouchEvent方法处理,再通过onInterceptTouchEvent方法判断是否拦截,若为true,则由自己的onTouchEvent方法来处理;否则交由子布局的dispatchTouchEvent处理,以此类推。

如果事件一直传递到View控件,在View控件的dispatchTouchEvent中,先交由onTouchListener的onTouch方法处理,若此方法返回true,dispatchTouchEvent方法返回true;否则由onTouchEvent方法来处理。

以上是关于android 事件分发机制的主要内容,如果未能解决你的问题,请参考以下文章

Android ViewGroup事件分发机制

android 事件分发机制

Android View 事件分发机制

Android 事件分发事件分发源码分析 ( ViewGroup 事件传递机制 四 | View 事件传递机制 )

Android事件分发机制五:面试官你坐啊

Android源码分析:View的事件分发机制探析