下載本文檔
版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
【移動(dòng)應(yīng)用開(kāi)發(fā)技術(shù)】Android事件分發(fā)機(jī)制的詳解
Android事件分發(fā)機(jī)制我們只考慮最重要的四個(gè)觸摸事件,即:DOWN,MOVE,UP和CANCEL。一個(gè)手勢(shì)(gesture)是一個(gè)事件列,以一個(gè)DOWN事件開(kāi)始(當(dāng)用戶觸摸屏幕時(shí)產(chǎn)生),后跟0個(gè)或多個(gè)MOVE事件(當(dāng)用戶四處移動(dòng)手指時(shí)產(chǎn)生),最后跟一個(gè)單獨(dú)的UP或CANCEL事件(當(dāng)用戶手指離開(kāi)屏幕或者系統(tǒng)告訴你手勢(shì)(gesture)由于其他原因結(jié)束時(shí)產(chǎn)生)。當(dāng)我們說(shuō)到“手勢(shì)剩余部分”時(shí)指的是手勢(shì)后續(xù)的MOVE事件和最后的UP或CANCEL事件。在這里我也不考慮多點(diǎn)觸摸手勢(shì)(我們只假設(shè)用一個(gè)手指)并且忽略多個(gè)MOVE事件可以被歸為一組這一實(shí)際情況。最后,我們假設(shè)文中的view都沒(méi)有注冊(cè)onTouchListener。我們將要討論的視圖層次是這樣的:最外層是一個(gè)ViewGroupA,包含一個(gè)或多個(gè)子view(children),其中一個(gè)子view是ViewGroupB,ViewGroupB中又包含一個(gè)或多個(gè)子view,其中一個(gè)子view是ViewC,C不是一個(gè)ViewGroup。這里我們忽略同層級(jí)view之間可能的交叉疊加。
假設(shè)用戶首先觸摸到的屏幕上的點(diǎn)是C上的某個(gè)點(diǎn),該點(diǎn)被標(biāo)記為觸摸點(diǎn)(touchpoint),DOWN事件就在該點(diǎn)產(chǎn)生。然后用戶移動(dòng)手指并最后離開(kāi)屏幕,此過(guò)程中手指是否離開(kāi)C的區(qū)域無(wú)關(guān)緊要,關(guān)鍵是手勢(shì)(gesture)是從哪里開(kāi)始的。默認(rèn)情況假設(shè)上面的A,B,C都沒(méi)有覆寫(xiě)默認(rèn)的事件傳播行為,那么下面就是事件傳播的過(guò)程:由于沒(méi)有view關(guān)心這個(gè)手勢(shì)(gesture),它們將不再會(huì)從“手勢(shì)剩余部分”中接收任何事件。處理事件現(xiàn)在,讓我們假設(shè)C實(shí)際上是關(guān)心這個(gè)手勢(shì)(gesture)的,原因可能是C被設(shè)置成可點(diǎn)擊的(clickable)或者你覆寫(xiě)了C的onTouchEvent方法。個(gè)人理解:從這里可以看出,各個(gè)View的onTouchEvent方法對(duì)DOWN事件的處理,代表了該View對(duì)以此DOWN開(kāi)始的整個(gè)手勢(shì)(gesture)的處理意愿,返回true代表愿意處理該gesture,返回false代表不愿意處理該gesture。onInterceptTouchEvent現(xiàn)在我們將討論一個(gè)新的方法:onInterceptTouchEvent,它只存在于ViewGroup中,普通的View中沒(méi)有這個(gè)方法。在任何一個(gè)view的onTouchEvent被調(diào)用之前,它的父輩們(ancestors)將先獲得攔截這個(gè)事件的一次機(jī)會(huì),換句話說(shuō),它們可以竊取該事件。在剛才的“處理事件”部分中,我們遺漏了這一過(guò)程,現(xiàn)在,讓我們把它加上:個(gè)人理解:感謝@編程世界的孩子的提醒,由此可見(jiàn),DOWN事件的處理實(shí)際上經(jīng)歷了一下一上兩個(gè)過(guò)程,下是指A->B的onInterceptTouchEvent,上是指C->B->A的onTouchEvent,當(dāng)然,任意一步的方法中返回true,都能阻止它繼續(xù)傳播。攔截事件現(xiàn)在,讓我們更進(jìn)一步,假設(shè)B沒(méi)有攔截DOWN事件,但它攔截了接下來(lái)的MOVE事件。原因可能是B是一個(gè)scrollingview。當(dāng)用戶僅僅在它的區(qū)域內(nèi)點(diǎn)擊(tap)時(shí),被點(diǎn)擊到的元素應(yīng)當(dāng)能處理該點(diǎn)擊事件。但是當(dāng)用戶手指移動(dòng)了一定的距離后,就不能再視該手勢(shì)(gesture)為點(diǎn)擊了——很明顯,用戶是想scroll。這就是為什么B要接管該手勢(shì)(gesture)。
下面是事件被處理的順序:下面的一些小事情可能會(huì)令你感到吃驚:從此開(kāi)始,你可以更進(jìn)一步。比如對(duì)mouthful-method(實(shí)在不知道該怎么翻譯啦!)requestDisallowInterceptTouchEvent,C可以用該方法阻止B竊取事件。如果你想更加瘋狂一點(diǎn),你可以在你自己的ViewGroup中直接覆寫(xiě)dispatchTouchEvent方法,并對(duì)
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 防雷設(shè)施安裝維護(hù)合同三篇
- 化妝品行業(yè)保安工作總結(jié)
- 兒童游樂(lè)設(shè)施設(shè)計(jì)美工工作總結(jié)
- 林業(yè)行業(yè)美工的森林保護(hù)
- 風(fēng)險(xiǎn)防范工作總結(jié)
- 【八年級(jí)下冊(cè)地理粵教版】第8章 珠江三角洲 單元測(cè)試
- 本科生畢業(yè)論文答辯記錄表
- 2025屆揚(yáng)州市高三語(yǔ)文(上)1月質(zhì)量調(diào)研試卷及答案解析
- 創(chuàng)新成果知識(shí)產(chǎn)權(quán)合同(2篇)
- DB33T 2188.4-2019 大型賽會(huì)志愿服務(wù)崗位規(guī)范 第4部分:禮賓接待志愿服務(wù)
- 初中必背古詩(shī)文138首
- 藍(lán)色國(guó)家科學(xué)基金4.3杰青優(yōu)青人才科學(xué)基金答辯模板
- DLT 5434-2021 電力建設(shè)工程監(jiān)理規(guī)范表格
- 2024年房屋交接確認(rèn)書(shū)
- 拓展低空經(jīng)濟(jì)應(yīng)用場(chǎng)景實(shí)施方案
- 北京市東城區(qū)2023-2024學(xué)年八年級(jí)上學(xué)期期末生物試題【含答案解析】
- 天皰瘡臨床分期與治療方案研究
- 開(kāi)放系統(tǒng)10861《理工英語(yǔ)(4)》期末機(jī)考真題及答案(第102套)
- 綜合技能訓(xùn)練實(shí)訓(xùn)報(bào)告學(xué)前教育
- 2024年國(guó)家能源集團(tuán)招聘筆試參考題庫(kù)含答案解析
- MOOC 管理學(xué)-鄭州輕工業(yè)大學(xué) 中國(guó)大學(xué)慕課答案
評(píng)論
0/150
提交評(píng)論