android viewgroup 的事件传递机制学习笔记
1.复写viewgroup的 onInterceptTouchEvent方法, 返回true会拦截子类事件,false不会拦截,交由子view的 dispatchTouchEvent方法。
2.viewgroup 中有一个dispatchTouchEvent方法,在该方法中disallowIntercept是指是否禁用掉事件拦截的功能,默认是false,也可以通过调用requestDisallowInterceptTouchEvent方法对这个值进行修改。
3.viewgroup中自view的click得到了执行,说明子view 的dispatchtouchevent方法返回了true,会拦截viewgroup的事件。
viewgroup 的dispatchTouchEvent源码分析。(以下是伪代码,理解用)
dispatchTouchEvent(){
在action_down时进行判断(){
if(disallowIntercept || !onInterceptTouchEvent ){ // 参考2
//如果viewgroup的intercept返回false 说明子view的点击事件在这里进行。
for(){
//遍历子view
if(判断自view是否正在被点击){.
if(调用子view的dispatchTouchEvent()){
//如果view的dispatchTouchEvent方法返回true 条件成立而使得整个viewgroup的dispatchTouchEvent方法返回为true,说明子view消费掉了点击事件。 事件到此结束。
return true;
}
}
}
}
}
}
参考自郭神的源码分析
http://blog.csdn.net/guolin_blog/article/details/9153747
更多相关文章
- 【Android】 分享一个完整的项目,适合新手!
- Android(安卓)蓝牙通信
- android 基本布局(RelativeLayout、TableLayout等)使用方法及各种
- 那些年,我们一起踩过的 “Android(安卓)坑”
- Drawable着色问题
- android sdk sdkmanger无界面使用方法(命令行更新SDK)
- Kotlin for Android使用教程(一)
- Service的onStartCommand方法的疑问
- 关于Spring for Android