ACTION_CANCEL事件是怎么產(chǎn)生的?當(dāng)滑出子View區(qū)域時(shí)會(huì)產(chǎn)生該事件嗎?

0.討論的前提

基于api 29源碼的Viewgroup分析,自定義View重寫(xiě)dispatchTouchEvent()方法的話也是可以自己隨便生成ACTION_CANCEL事件的。

1.先說(shuō)結(jié)論,如下幾種情況會(huì)產(chǎn)生ACTION_CANCEL事件

  1. 在子View處理事件的過(guò)程中,父View對(duì)事件攔截
  2. 子View被設(shè)置了PFLAG_CANCEL_NEXT_UP_EVENT標(biāo)記時(shí)
  3. 在子View處理事件的過(guò)程中被從父View中移除時(shí)
  4. 當(dāng)View從Window中分離時(shí)

2.對(duì)應(yīng)結(jié)論所在源碼位置

1. 在Viewgroup源碼中通過(guò)搜索ACTION_CANCEL出現(xiàn)的位置共有9處,出現(xiàn)在以下幾個(gè)方法中,其中后四個(gè)只是在注釋中
第一個(gè)出現(xiàn)在dispatchTouchEvent()方法中

第二個(gè)出現(xiàn)在cancelAndClearTouchTargets()方法中,在該方法中會(huì)調(diào)用cancel出現(xiàn)的第四個(gè)方法

第三個(gè)出現(xiàn)在cancelTouchTarget()

第四五個(gè)出現(xiàn)在dispatchTransformedTouchEvent()中
2. 結(jié)論1源碼分析
3.結(jié)論2源碼分析
4.結(jié)論3源碼分析
5.結(jié)論4源碼分析

3. 最后,如上,滑出子View區(qū)域時(shí),并不會(huì)產(chǎn)生Cancel事件,而且還會(huì)繼續(xù)接收后續(xù)的move,up等事件

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容