?
ViewGroup的onInterceptTouchEvent 顧名思義,作用是攔截TouchEvent。
假如有以下布局
在一組TouchEvent中可能出現(xiàn):
沒有View或ViewGroup消費
ACTION_DOWN事件
,則TouchEvent的傳遞路徑會是:
ACTION_DOWN?:?
ViewGroup1.onInterceptTouchEvent —> ViewGroup2.onInterceptTouchEvent?—> ChildView.onTouchEvent —> ViewGroup2.onTouchEvent —> ViewGroup1.onTouchEvent?
由于誰都沒有消費ACTION_DOWN事件,后續(xù)的MOVE,UP事件將不會傳進來。
?
ViewGroup2攔截且消費了
ACTION_DOWN事件
,則TouchEvent的傳遞路徑會是:
ACTION_DOWN?:
ViewGroup1.onInterceptTouchEvent —> ViewGroup2.onInterceptTouchEvent?—> ?ViewGroup2.onTouchEvent ;
ACTION_MOVE :?
ViewGroup1.onInterceptTouchEvent —> ViewGroup2.onTouchEvent ;
ACTION_MOVE?:?
ViewGroup1.onInterceptTouchEvent —> ViewGroup2.onTouchEvent ;
也即后續(xù)的TouchEvent都傳遞給了ViewGroup2。
?
ViewGroup2攔截了
ACTION_DOWN事件
但不消費,而ViewGroup1消費了該TouchEvent
,則TouchEvent的傳遞路徑會是:
ACTION_DOWN :?
ViewGroup1.onInterceptTouchEvent —> ViewGroup2.onInterceptTouchEvent?—> ?ViewGroup2.onTouchEvent —> ViewGroup1.onTouchEvent ;
ACTION_MOVE :?
ViewGroup1.onTouchEvent ;
ACTION_MOVE :?
ViewGroup1.onTouchEvent ;?
也即后續(xù)的TouchEvent都傳遞給了ViewGroup1。
?
ChildView先消費了
ACTION_DOWN事件
,然后滿足一定條件時ViewGroup2攔截了TouchEvent,
此時無論ViewGroup2是否消費該TouchEvent
,TouchEvent的傳遞路徑是:
ACTION_DOWN :?
ViewGroup1.onInterceptTouchEvent —> ViewGroup2.onInterceptTouchEvent?—> ChildView.onTouchEvent?;
ACTION_MOVE :?
ViewGroup1.onInterceptTouchEvent —> ViewGroup2.onInterceptTouchEvent?—> ChildView.onTouchEvent ;
ACTION_MOVE :?
ViewGroup1.onInterceptTouchEvent —> ViewGroup2.onInterceptTouchEvent ?&&?
ACTION_CANCEL?: ChildView.onTouchEvent ; ?
(滿足條件觸發(fā)
ViewGroup2攔截
,會傳遞
ACTION_CANCEL
給ChildView)
ACTION_MOVE?:?
ViewGroup1.onInterceptTouchEvent —> ViewGroup2.onTouchEvent ;
ACTION_MOVE :?
ViewGroup1.onInterceptTouchEvent —> ViewGroup2.onTouchEvent ;
也即后續(xù)的TouchEvent都傳遞給了ViewGroup2的onTouchEvent,
且無論ViewGroup2是否消費該TouchEvent
?。
?
?
更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯(lián)系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
