android事件分发总结
2015-08-12 14:33
609 查看
以下是activity类中的事件分发方法
如上所示,在一个activity的事件分发中,首先是调用activity的以上方法dispatchTouchEvent(MotionEvent ev);其处理流程如下
如果是ACTION_DOWN消息,则调用onUserInteraction().这个函数默认什么都不做。
调用所包含的window对象的superDispatchTouchEvent(),其实就是将事件传给该activity的view树,也就是调用该activity的view树根结束mDecorView的事件分发方法dispatchOnTouchEvent(也就是ViewGroup的dispatchOnTouchEvent方法),如果view树处理了该事件(也叫消费事件),即返回true,则一次事件处理结束。
如果view树处理不了该事件,即返回false, 则调用activity自己的onTouchEvent方法来处理。
ViewGroup对触摸事件的分发处理,分发逻辑在其dispatchOnTouchEvent(MotionEvent ev)中
对于down消息
首先判断该ViewGroup本身是否被禁止获取Touch消息,如果没有禁止并且其回调onInterceptTouchEvent回调中没有消耗该消息,则意味着该消息可以传递给子视图,如果子视图消耗了该消息,则直接返回true;
开始寻找子视图。从最后一个子孩子遍历起,寻找一个能够处理down事件的子孩子。从代码上看是从最后个孩子开始依次查询触摸点是否在该孩子身上,然后调用其dispatchOnTouchEvent方法,如果该方法返回true,则表明该孩子可以处理该事件,则将该孩子设置为target,后续收到的事件直接分发给他,而不需要再遍历子孩子。
public boolean dispatchTouchEvent(MotionEvent ev) { if (ev.getAction() == MotionEvent.ACTION_DOWN) { onUserInteraction(); } if (getWindow().superDispatchTouchEvent(ev)) { return true; } return onTouchEvent(ev); }
如上所示,在一个activity的事件分发中,首先是调用activity的以上方法dispatchTouchEvent(MotionEvent ev);其处理流程如下
如果是ACTION_DOWN消息,则调用onUserInteraction().这个函数默认什么都不做。
调用所包含的window对象的superDispatchTouchEvent(),其实就是将事件传给该activity的view树,也就是调用该activity的view树根结束mDecorView的事件分发方法dispatchOnTouchEvent(也就是ViewGroup的dispatchOnTouchEvent方法),如果view树处理了该事件(也叫消费事件),即返回true,则一次事件处理结束。
如果view树处理不了该事件,即返回false, 则调用activity自己的onTouchEvent方法来处理。
ViewGroup对触摸事件的分发处理,分发逻辑在其dispatchOnTouchEvent(MotionEvent ev)中
对于down消息
首先判断该ViewGroup本身是否被禁止获取Touch消息,如果没有禁止并且其回调onInterceptTouchEvent回调中没有消耗该消息,则意味着该消息可以传递给子视图,如果子视图消耗了该消息,则直接返回true;
开始寻找子视图。从最后一个子孩子遍历起,寻找一个能够处理down事件的子孩子。从代码上看是从最后个孩子开始依次查询触摸点是否在该孩子身上,然后调用其dispatchOnTouchEvent方法,如果该方法返回true,则表明该孩子可以处理该事件,则将该孩子设置为target,后续收到的事件直接分发给他,而不需要再遍历子孩子。
相关文章推荐
- Android中ExpandableListView控件基本使用
- Android基本概念
- Android读取SD卡内容
- Android(安卓)开发通过NDK调用JNI,使用opencv做本地c++代码开发配置方法实现边缘检测代码(2)
- 【Xamarin开发 Android 系列 13】 应用打包部署
- 【Android】首次进入应用时加载引导界面
- 【Xamarin开发 Android 系列 11】 创建一个Json读取数据应用-添加摄像头集成
- 【Xamarin开发 Android 系列 12】 创建一个Json读取数据应用-添加定位服务
- Android Activity的销毁和重建
- 【Xamarin开发 Android 系列 9】 创建一个Json读取数据应用-列表页(中)
- 【Xamarin开发 Android 系列 10】 创建一个Json读取数据应用-详情页(下)
- Android之——JNI初探
- 【Xamarin开发 Android 系列 8】 创建一个Json读取数据应用(上)
- Android Api Demos登顶之路(三十一)Alarm Controller
- Android 获取assets的绝对路径(转载)
- Android之——NDK环境搭建
- Android Zxing框架扫描解决扫描框大小,图片压缩问题
- Fragment实现Tabhost效果(未完)
- Android Context 是什么?
- Android编码规范