android的view事件分发机制,仅作为笔记记录
设定view有触摸事件,分发事件,拦截事件分别为T,D,I,再设有一套布局有三层结构,根目录的rootView,第二层目录parentView,第三层为最后一层即最顶层的子布局chilView
分别写三个自定义view,写上dispatchTouchEvent,onInterceptTouchEvent,onTouchEvent方法,仅用super方法,然后运行起来测试点击事件
第一种情况 ,dispatchTouchEvent,onInterceptTouchEvent,onTouchEvent不更改方法,看看三层布局的此三个方法的执行顺序先后顺序为
rootView(D)->rootView(I)->parentView(D)->parentView(I)->chilView(D)->chilView(I)->chilView(T)->parentView(T)->rootView(T)
二、将rootView(D)的返回值改为false,此时会发现整个点击事件就此消失
三、rootView(I)的返回值 改为true,此时点击事件就在rootView这层终止不再继续往子布局传递,而此次的点击事件由rootView(T)来进行执行rootView(D)->rootView(I)->rootView(T)
四、将parentView(D)返回值改为false,此次点击事件在parentView层终止,由rootView(T)进行执行
五、将parentView(I)返回值改为true,此次点击事件在parentView层终止,与第四种情况 不同的是由parentView(T)进行执行
六、同理chilView(I),chilView(T)这两个方法的返回值和四,五点相似
七、如果把chilView(T)的值改为true,则事件会重新执行rootView(D)->rootView(I)->parentView(D)->parentView(I)->chilView(D)->chilView(T),此次没有再调用chilView(I)方法
个人理解,dispatchTouchEvent为整个事件的总开关,此方法的返回值变成false,则整个事件就消失,onInterceptTouchEvent为二级开关