第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問(wèn)題,去搜搜看,總會(huì)有你想問(wèn)的

Android:onInterceptTouchEvent和dispatchTouchEvent

Android:onInterceptTouchEvent和dispatchTouchEvent

寶慕林4294392 2019-11-04 15:30:11
onInterceptTouchEvent和dispatchTouchEventAndroid 之間有什么區(qū)別?根據(jù)android開(kāi)發(fā)人員指南,這兩種方法均可用于攔截觸摸事件(MotionEvent),但是有什么區(qū)別?在View()層次結(jié)構(gòu)中如何進(jìn)行互動(dòng)onInterceptTouchEvent,dispatchTouchEvent以及如何onTouchEvent互動(dòng)ViewGroup?
查看完整描述

3 回答

?
牧羊人nacy

TA貢獻(xiàn)1862條經(jīng)驗(yàn) 獲得超7個(gè)贊

最好的解密方法是源代碼。該文檔不足以解釋這一點(diǎn)。


dispatchTouchEvent實(shí)際上是在Activity,View和ViewGroup上定義的。將其視為決定如何路由觸摸事件的控制器。


例如,最簡(jiǎn)單的情況是View.dispatchTouchEvent,它將觸摸事件路由到OnTouchListener.onTouch(如果已定義)或擴(kuò)展方法onTouchEvent。


對(duì)于ViewGroup.dispatchTouchEvent,事情要復(fù)雜得多。它需要確定其子視圖中的哪個(gè)應(yīng)獲取事件(通過(guò)調(diào)用child.dispatchTouchEvent)。這基本上是一種命中測(cè)試算法,您可以確定哪個(gè)子視圖的邊界矩形包含接觸點(diǎn)坐標(biāo)。


但是在將事件分派到適當(dāng)?shù)淖右晥D之前,父級(jí)可以一起監(jiān)視和/或攔截事件。這就是onInterceptTouchEvent的用途。因此,它會(huì)在進(jìn)行點(diǎn)擊測(cè)試之前先調(diào)用此方法,如果事件被劫持(通過(guò)從onInterceptTouchEvent返回true),則會(huì)向子視圖發(fā)送ACTION_CANCEL,以便他們可以放棄對(duì)觸摸事件的處理(從先前的觸摸事件開(kāi)始),然后再取消父級(jí)的所有觸摸事件都將分派到onTouchListener.onTouch(如果已定義)或onTouchEvent()。同樣在這種情況下,永遠(yuǎn)不會(huì)再次調(diào)用onInterceptTouchEvent。


您甚至要覆蓋[Activity | ViewGroup | View] .dispatchTouchEvent嗎?除非您正在執(zhí)行一些自定義路由,否則您可能不應(yīng)該這樣做。


如果要在父級(jí)監(jiān)視和/或攔截觸摸事件,則主要擴(kuò)展方法是ViewGroup.onInterceptTouchEvent,并使用View.onTouchListener / View.onTouchEvent進(jìn)行主事件處理。


總而言之,它的設(shè)計(jì)imo過(guò)于復(fù)雜,但android API更傾向于靈活性而不是簡(jiǎn)單性。


查看完整回答
反對(duì) 回復(fù) 2019-11-04
  • 3 回答
  • 0 關(guān)注
  • 741 瀏覽
慕課專(zhuān)欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢(xún)優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)