單點(diǎn)的Down 事件
dispatchTouchEvent(MotionEvent ev)
來處理事件分發(fā)(View 只能消耗事件,走ontouchlister 和onclicklister)
onInterceptTouchEvent
來返回是否攔截,攔截的話就自己處理,不攔截繼續(xù)分發(fā);
點(diǎn)擊之后無子view或者點(diǎn)擊事件沒有在子view 上,視為無子view處理

image.png
dispatchTransformedTouchEvent
onInterceptTouchEvent 為false時(shí)候,會(huì)調(diào)用此函數(shù)來循環(huán)分發(fā),如果都沒有人處理的話,由dispatchTouchEvent 自己處理相當(dāng)于onInterceptTouchEvent=true
當(dāng)某個(gè)子View 處理后,會(huì)生成一盒hand來告知上層ViewGropel有view 已經(jīng)處理;下次也是單點(diǎn)事件也是有此view 處理

image.png
滑動(dòng)事件
滑動(dòng)事件不再做事件的分發(fā),只有down事件來做分發(fā);
正常流程:down 誰來處理move 事件誰就來處理
攔截流程:
父類攔截發(fā)法:比較簡(jiǎn)單,直接用onInterceptTouchEvent來做處理;
子類攔截法: 也是首先onInterceptTouchEvent來設(shè)置為false(down事件會(huì)重置初始值),
getParent().requestDisallowInterceptTouchEvent(true);來讓設(shè)父viewGrop gorpflag 為true來接受不到是否攔截的的表達(dá),失去攔截處理,最后落到子view的身上;