Android Touch事件分发过程详解

作者:JC2024.01.05 16:37浏览量:12

简介:本文将详细解析Android中Touch事件从产生到处理的完整分发过程,帮助读者更好地理解Android事件分发机制。

在Android中,当一个Touch事件产生后,系统需要把这个事件传递给某个具体的View进行处理。这个传递的过程就是分发过程。Touch事件分发是指对触摸事件MotionEvent的分发过程。当一个MotionEvent产生后,系统需要把这个事件传递给某个具体的View进行处理,这个传递的过程就是分发过程。 当一个touch事件产生后,它的传递过程遵循如下顺序:Activity -> Window -> View,即事件总是先传递给Activity,Activity传递给Window,最后Window传递给DecorView。 DecorView接收到事件后,就会按照事件分发机制从ViewGroup->View去分发事件。
由于事件总是先传递到Activity,我们看一下Activity的dispatchTouchEvent方法是怎样把触摸事件从activity传递到ViewGroup的。
Activity.class:
public boolean dispatchTouchEvent(MotionEvent ev)
{
if(getWindow().superDispatchTouchEvent(ev)
return true;
//所有view都不处理事件,则直接调用Activity的onTouchEvent方法
return onTouchEvent();
}
首先调用Window的superDispatchTouchEvent方法由Window去分发事件,如果Window不处理该事件则会调用Activity的onTouchEvent方法来进行处理。
跟踪源代码会发现事件是从Activity -> PhoneWindow -> DecoreView-> dispatchTouchEvent,如下:
DecorView是一个FrameLayout,由DecorView分发事件,最终调用DecorView的dispatchTouchEvent事件。
考虑一种情况,如果一个View的onTouchEvent返回false,那么它的父容器的onTouchEvent将会被调用,依此类推。如果所有的元素都不处理这个事件,那么这个事件最终将传递给Activity处理,即Activity的onTouchEvent方法会被调用(因为没有子view处理事件,dispatchTouchEvent返回false,因此会调用Activity的onTouchEvent函数)。
以上就是Android Touch事件的分发过程。理解这个过程有助于我们更好地理解和处理用户在应用中的交互行为,提升应用的用户体验。