事件因素:Activity --> ViewGroup --> View
一、Activity中攔截事件
1,Activity_dispatch攔截,返回false的情況
? ? ? Activity_dispatch --> DOWN / UP / MOVE --> 分發(fā)結(jié)束
2,Activity_dispatch攔截,返回true的情況
? ? ? Activity_dispatch --> DOWN / UP / MOVE --> 分發(fā)結(jié)束
3,Activity_onTouchEvent攔截,返回false的情況
? ? ? (DOWN事件) Activity_dispatch --> ViewGroup_dispatch --> Activity_onTouchEvent --> 分發(fā)結(jié)束
? ? ? (MOVE / UP事件,ViewGroup_dispatch將不再執(zhí)行) Activity_dispatch --> Activity_onTouchEvent --> 分發(fā)結(jié)束
4,Activity_onTouchEvent攔截,返回true的情況
? ? ? (DOWN事件) Activity_dispatch --> ViewGroup_dispatch --> Activity_onTouchEvent --> 分發(fā)結(jié)束
? ? ? (MOVE / UP事件,ViewGroup_dispatch將不再執(zhí)行) Activity_dispatch --> Activity_onTouchEvent --> 分發(fā)結(jié)束
二、ViewGroup中攔截事件
1,ViewGroup_dispatch 攔截,返回false的情況
? ? (DOWN事件) Activity_dispatch --> ViewGroup_dispatch --> Activity_onTouchEvent --> 分發(fā)結(jié)束
? ? (MOVE / UP事件,ViewGroup_dispatch將不再執(zhí)行) Activity_dispatch --> Activity_onTouchEvent --> 分發(fā)結(jié)束
2,ViewGroup_dispatch 攔截,返回true的情況
? ? (DOWN事件) Activity_dispatch --> ViewGroup_dispatch --> 分發(fā)結(jié)束
? ? (MOVE / UP事件)? Activity_dispatch --> ViewGroup_dispatch --> 分發(fā)結(jié)束
3,ViewGroup_intercept 攔截,返回false的情況(默認(rèn))
? ? ? (DOWN / UP / MOVE) Activity_dispatch --> ViewGroup_dispatch --> ViewGroup_onIntercept --> View_dispatch --> View_onTouchEvent --> 分發(fā)結(jié)束
4,ViewGroup_intercept 攔截,返回true的情況(默認(rèn))
? ? ? (DOWN事件) Activity_dispatch --> ViewGroup_dispatch --> ViewGroup_onIntercept --> ViewGroup_onTouchEvent --> 分發(fā)結(jié)束
? ? ? (MOVE / UP 事件,ViewGroup_onIntercept返回true后,不再調(diào)用)? Activity_dispatch --> ViewGroup_dispatch --> ViewGroup_onTouchEvent --> 分發(fā)結(jié)束
5,ViewGroup_intercept 根據(jù)條件判斷攔截,不攔截DOWN事件,攔截MOVE事件
? ? ? (DOWN事件) Activity_dispatch --> ViewGroup_dispatch --> ViewGroup_onIntercept --> View_dispatch --> View_onTouchEvent --> 分發(fā)結(jié)束
? ? ? (首次 MOVE事件攔截,此次事件分發(fā),雖然攔截了MOVE事件,但還會(huì)繼續(xù)下發(fā)。不同之處在于,view接收到的事件不是MOVE而是CANCLE)
? ? ? Activity_dispatch --> ViewGroup_dispatch --> ViewGroup_onIntercept --> View_dispatch --> View_onTouchEvent --> 分發(fā)結(jié)束
? ? (再次 MOVE事件攔截,ViewGroup_onIntercept將不再調(diào)用)
? ? ? Activity_dispatch --> ViewGroup_dispatch --> ViewGroup_onTouchEvent -- > 分發(fā)結(jié)束
6,UP事件一般不做攔截。