Android View的事件分发机制浅析
2015-12-10 14:48
369 查看
View的事件分发机制:
View的事件分发机制分为两种,一种是View内部的事件分发,一种是ViewGroup中的事件分发
ViewGroup的事件是以自顶向下的方式传递,即从Root ViewGroup依次传递到各个子View。首先,事件传递到Root ViewGroup的时候,一定会调用他的dispatchTouchEvent方法来进行事件分发,dispatchTouchEvent首先会调用onInterceptTouchEvent 如果onInterceptTouchEvent = true,也就是事件拦截,就直接进入自己内部的事件分发,而不向下继续进行传递。如果onInterceptTouchEvent = false即没有进行拦截,那么会依次遍历子View,事件传递到点击位置所在的子View,子View再调用dispatchTouchEvent方法,依此递归,完成事件的分发。
View内部的事件传递还是首先调用dispatchTouchEvent方法,dispatchTouchEvent会分发给onTouchListener的onTouch。如果onTouch返回false(默认),就继续传递给onTouchEvent进行处理。另外,如果一个view的onTouchEvent方法返回为true,即表示事件已被这个View处理,不会再去传递,如果返回false,表示事件还未处理完毕,事件还会继续传递。方法的调用顺序为 dispatchTouchEvent, onInterceptTouchEvent(如果是viewGroup)、 onTouchListener、内部的onTouch方法、onTouchEvent、onClickListener 里面的onClick。
View的事件分发机制分为两种,一种是View内部的事件分发,一种是ViewGroup中的事件分发
ViewGroup的事件是以自顶向下的方式传递,即从Root ViewGroup依次传递到各个子View。首先,事件传递到Root ViewGroup的时候,一定会调用他的dispatchTouchEvent方法来进行事件分发,dispatchTouchEvent首先会调用onInterceptTouchEvent 如果onInterceptTouchEvent = true,也就是事件拦截,就直接进入自己内部的事件分发,而不向下继续进行传递。如果onInterceptTouchEvent = false即没有进行拦截,那么会依次遍历子View,事件传递到点击位置所在的子View,子View再调用dispatchTouchEvent方法,依此递归,完成事件的分发。
View内部的事件传递还是首先调用dispatchTouchEvent方法,dispatchTouchEvent会分发给onTouchListener的onTouch。如果onTouch返回false(默认),就继续传递给onTouchEvent进行处理。另外,如果一个view的onTouchEvent方法返回为true,即表示事件已被这个View处理,不会再去传递,如果返回false,表示事件还未处理完毕,事件还会继续传递。方法的调用顺序为 dispatchTouchEvent, onInterceptTouchEvent(如果是viewGroup)、 onTouchListener、内部的onTouch方法、onTouchEvent、onClickListener 里面的onClick。
相关文章推荐
- Android handler机制浅析
- android项目调试问题(ActivityManager: Starting: Intent { act=android.intent.action.MAIN cat=[android.inten)
- Android开源项目和轮子
- 编译 Android 版本的 Opus 音频编解码库的方法
- ClassCastException: android.widget.ImageView cannot be cast to android.widget.TextView
- android绑定远程服务以及android接口定义语言(aidl)
- 【android】dp和px转化
- Android 的设置项 II-Reading Settings&Custom Preference
- android布局详解
- Android view 数据缓存
- Android特效Toast详解
- 读《50 Android Hacks》笔记整理Hack 44~Hack 50
- Android开发基本命名规范
- Android_(自定义view_3)
- android如何在一个布局文件中包含另外一个布局文件(include属性)
- Android 内存优化汇总
- 【Android效果集】弹幕效果
- Android学习摘记——简单的自定义View(自绘控件)
- Android自定义组合控件详细示例 (附完整源码)
- android studio 百度地图使用环境配置及230错误码解决方法