Android事件分发

Posted dfqin

tags:

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

1. 当手触摸屏幕,会产生一个事件,此事件由PhoneWindow的DecorView处理,它首先会调用当前Activity的dispatchTouchEvent,如果Activity不处理,事件会交由 DecorView去派发给子view去处理,如果子view不处理,则会调用activity的onTouchEvent事件。

2. 当事件被交给ViewGroup处理时,会调用dispatchTouchEvent()方法,它首先调用onInterceptTouchEvent()看当前ViewGroup是否要拦截掉此事件,如果返回true表示要拦截,事件不再传递下去,直接调用当前ViewGroup的onTouchEvent,由当前ViewGroup处理。如果不拦截的话事件继续向下传递给子view去处理。

3. 当事件被传递到View,也会调用dispatchTouchEvent()方法,因为View没有子View可以派发了,所以会调用它的onTouchEvent()方法,如果返回true表示当前View处理此事件,否则表示不处理,交由父容器处理。

整理思路伪代码如下:

public boolean dispatchTouchEvent(MotionEvent ev) 
    boolean consume = false;
    if (onInterceptTouchEvent(ev)  //拦截事件,由当前容器处理
        consume = onTouchEvent(ev);
     else 
        consume = child.dispatchTouchEvent(ev); //交给孩子去处理
        if (!consume) 
            consume = onTouchEvent(ev); //孩子不处理,自己处理
        
    
    return consume;

 

 

 

 

 

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

Android事件分发

Android View 事件分发机制

Android 事件分发事件分发源码分析 ( ViewGroup 事件传递机制 五 )

Android 事件分发事件分发源码分析 ( ViewGroup 事件传递机制 三 )

Android 事件分发事件分发源码分析 ( ViewGroup 事件传递机制 二 )

Android 事件分发事件分发源码分析 ( ViewGroup 事件传递机制 一 )