以 Action_Down为例
Activity
1:dispatchTouchEvent
返回true或者false都自己消费,不做其他传递
返回super,传递到viewGroup的dispatchTouchEvent
viewGroup
1:dispatchTouchEvent
返回true 自己直接消费掉,不再向下传递,也不传递给自己的OnTouchEvent
返回false:传递给Activity的OnTouchEvent
super——> onInterceptTouchEvent
2:onInterceptTouchEvent
2.1:true->拦截——传递给自己的第三个方法OnTouchEvent
2.1.1:onTouchEvent返回super或者false,由Actvitiy进行处理,事件不会在传递给ViewGroup;
直接由activity进行处理,类似于老板交给员工任务,员工没完成好,老板以后就不交给这个员工了
2.1.2:true viewgroup自己消费,后续的事件也会给到viewgroup。
2.2:false->不拦截,则继续传递给子类,BUtton则默认给自己的ONtouchEvent消费掉
3:View 在这里是button
3.1:view只有两个方法,没有onInterceptTouchEvent
首先如果dispatchTouchEvent返回true,那么事件就直接消费掉了,不传递给自己的onTouchEvent方法
3.2:dispatchTouchEvent返回false就会把事件
给父类的
onTouchEvent消费。以后事件不再交给这个view。
3.3:view的onTouchEvent方法如果返回true,
那么事件就会自己消费点,并且不会调用onClick这个回调方法
3.4:如果onTouchEvent返回false,那么事件就会交给父类,
这个系列剩下的事件就不会再交给这个view了
3.5:返回super_onclick
总结:
1:dispatchTouchEvent这个方法
返回true:直接消费掉,不在做其他传递
返回false:{//区别
activity:和true一样直接消费掉
viewgroup和view:把事件给父类的onTouchEvent消费
}
返回super就都是进行分发
2:onInterceptTouchEvent
只有viewgroup有
返回true:拦截,给自己的onTouchEvent消费
返回false和返回super:不拦截,分发给子view
3:onTouchEvent
返回true:消费掉事件
返回false:就传递给父类
返回super有点区别{
viewgroup:就和false一样,传递给父类
view:就会再接着往下传递,比如调用点击回调
}
网友评论