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)