android开发点击事件处理机制简单介绍

android应用开发中经常会处理点击按键事件,那么当用户点击一个按钮后系统是怎么把点击事件分配给一个某控件处理的呢?

       当用户点击一个按钮后系统处理顺序为Activity->Window->View既事件先传递给Actity在传给Window在传给View,View再经过三个阶段来处理该事件分别是事件分发、事件拦截、事件处理对应的方法是public boolean dispatchTouchEvent(MotonEvent ev)(事件分发)、public boolean onInterceptTouchEvent(MotionEvent event)(事件拦截)、public boolean onTouchEvent(MotionEvent event)(事件处理)。

android开发点击事件处理机制简单介绍

 

        通过上图我们可以看出事件分到Viw后的处理顺序,系统首先从控件的父viewGorup把点击事件发布到他所属的子view,然后子View判断是否拦截该事件,如果拦截就掉用点击事件,如果不拦截就继续往下层分发直到有view拦截并处理,如果都没有view拦截话,该点击事件就由activity消耗掉,viewGorup默认是不拦截点击事件的。

给个例子代码来演示view事件分发-拦截-处理三个方法调用关系。

eg:

public boolean dispatchTouchEvent(MotionEvent ev){

boolean consume = false;

if(onInterceptTouchEvent(ev)){

consume = onTouchEvent(ev);

}else{

consume = child.dispatchTouchEvent(ev);

}

return consume;

}

那么了解android开发事件分发机制有什么用呢?

在开发APP的过程中遇到的某些页面嵌套了多次view,可能会出现滑动冲动的情况提供解决思路。