事件分发—CZZ

事件分发.jpg

以 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:就会再接着往下传递,比如调用点击回调
}

你可能感兴趣的:(事件分发—CZZ)