您的位置:首页 > 移动开发 > Android开发

Android事件分发机制

2016-07-28 09:16 267 查看
Android事件的传递路其实是一个递归的过程,默认情况下:首先事件由Activity传递下来,依次调用ViewGroup 、View的dispatchTouchEvent 方法,然后又从View开始依次调用View、ViewGroup、Activity的onTouch方法,整个事件的传递过程类似于一个“U”型,下面给出一个图:



(严格说,上图针对于ACTION_DOWN事件)

总结几点:

1、Activity的dispatchTouchEvent方法无论返回什么,都会调用ViewGroup的dispatchTouchEvent

2、ViewGroup、View的方法返回true,就会消耗掉此事件,不会再往下面传递,当然也包括上层的回溯

3、ViewGroup想把事件直接分发给自己的onTouchEvent方法,则重写onInterceptTouchEvent方法,让它返回true。onInterceptTouchEvent方法其实是一个拦截器,表示是否拦截此事件,不让事件再分发给ViewGroup的子View。默认返回false表示不拦截,true表示拦截。

4、ACTION_MOVE、ACTION_UP和ACTION_DOWN在默认情况下,事件的传递是一样的,但是在重写了修改了返回值的情况下,前两者的事件传递规则是:事件是在哪个控件消耗掉的,那么ACTION_MOVE、ACTION_UP事件就会从上往下传递到这个控件就止住了,如果是在onTouchEvent方法消耗掉的,那么还会调用此控件的onTouchEvent方法。如下图:

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  android 事件分发