Android之事件分發(fā)機(jī)制與沖突詳解
在日常的開發(fā)過程中,我們往往會(huì)在同一個(gè)界面中出現(xiàn)內(nèi)外兩層或者多層View同時(shí)滑動(dòng)的現(xiàn)象,這個(gè)時(shí)候往往**會(huì)出現(xiàn)滑動(dòng)沖突。面對滑動(dòng)沖突,很多開發(fā)人員不知道從哪里入手,**即便稍微有點(diǎn)思路,也要費(fèi)點(diǎn)時(shí)間才能解決。其實(shí)滑動(dòng)沖突的解決是有一定的套路的。
下面主要針對Android開發(fā)中幾種常見的滑動(dòng)沖突及對應(yīng)的解決方案來進(jìn)行講解
常見的滑動(dòng)沖突場景!
目前常見的滑動(dòng)沖突主要可以分為以下三種來概括:
- 外部滑動(dòng)方向和內(nèi)部View的滑動(dòng)方向不一致,內(nèi)部的View和外部的View的滑動(dòng)方向是**互相垂直的,**比如Scroll View嵌套View Pager,如圖1-1所示;
- 外部滑動(dòng)方向和內(nèi)部View的滑動(dòng)方向是一致的,內(nèi)部的View和外部的View的滑動(dòng)方向**互相平行,**比如Scroll View嵌套RecyclerView ,如圖1-2所示;
- 外部滑動(dòng)方向與內(nèi)部滑動(dòng)方向即有相同的又有垂直的,也就是以上兩種情況的綜合出現(xiàn),這種情況是算比較復(fù)雜的一種情況,如圖1-3所示。
常見滑動(dòng)沖突的處理思路!
滑動(dòng)沖突看起來比較棘手,特別像場景3的那種嵌套好幾層的滑動(dòng)沖突。
但不管滑動(dòng)沖突多么的復(fù)雜,它主要涉及到的都是一些觸摸事件的分發(fā)和攔截,有一定的處理規(guī)則在里面,我們可以根據(jù)規(guī)則來選擇合適的方法來進(jìn)行處理:
常用的沖突解決的兩種基本思路
(1). 外部攔截法
即重寫父容器的onInterceptTouchEvent方法,根據(jù)父容器是否需要攔截這個(gè)事件來返回對應(yīng)的布爾值,如果父容器需要攔截這個(gè)觸摸事件則返回true,如果不攔截則返回false;
(2). 內(nèi)部攔截法
即父容器不攔截任何的事件,將對應(yīng)的事件傳遞給子元素,根據(jù)子元素是否需要消耗這個(gè)觸摸事件來進(jìn)行處理,如果子元素不消耗此事件,又會(huì)交由父容器來進(jìn)行對應(yīng)的處理,子容器需要做如圖2-2處理,父容器需要做如圖2-3所示處理。
同時(shí),事件沖突也是一線互聯(lián)網(wǎng)大廠中的必考題,來看看下面這些問題你能答上來幾個(gè)?
- 說說你對事件分發(fā)機(jī)制的理解。(阿里面試真題)
- down事件和move事件對應(yīng)的流程機(jī)制是什么?(騰訊面試真題)
- 事件沖突中如何快速找到解決方案,請舉例。(字節(jié)面試真題)
- ScrollView 和RecyclerView 沖突時(shí),如何解決?(百度面試真題)
所以說,關(guān)于解決事件沖突的技巧,也是大家需要掌握其中精髓的!
但如果通過博客文章學(xué)習(xí),看完后自身是感覺學(xué)到了,一旦項(xiàng)目中出現(xiàn)了事件沖突的問題,很難將文章中的知識點(diǎn)運(yùn)用到實(shí)際問題當(dāng)中,而很多開發(fā)者在解決事件沖突中遇到的最大問題,就是很難找到解決問題的切入點(diǎn)。
到此這篇關(guān)于Android之事件分發(fā)機(jī)制與沖突詳解的文章就介紹到這了,更多相關(guān)Android之事件分發(fā)機(jī)制與沖突內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Android實(shí)現(xiàn)帶圓環(huán)的圓形頭像
這篇文章主要為大家詳細(xì)介紹了Android實(shí)現(xiàn)帶圓環(huán)的圓形頭像,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2020-08-08解決Android Device Monitor 的 File Explorer 中無法打開某些文件夾的問題
這篇文章主要介紹了解決Android Device Monitor 的 File Explorer 中無法打開某些文件夾的問題,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-04-04一文帶你了解Android系統(tǒng)的啟動(dòng)流程
Android系統(tǒng)的啟動(dòng)是一個(gè)復(fù)雜的過程,涉及到多個(gè)階段和組件,所以本文將給大家詳細(xì)的介紹一下Android系統(tǒng)的啟動(dòng)流程,文中也有圖片和代碼示例的講解,需要的朋友可以參考下2023-09-09Android studio 使用Debugger問題(代碼中含有ndk)
這篇文章主要介紹了Android studio 使用Debugger問題(代碼中含有ndk),非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下2017-11-11Android activity堆棧及管理實(shí)例詳解
這篇文章主要介紹了Android activity堆棧及管理實(shí)例詳解的相關(guān)資料,非常不錯(cuò),具有參考借鑒價(jià)值,對android activity堆棧相關(guān)知識感興趣的朋友一起學(xué)習(xí)吧2016-09-09Android中控制和禁止ScrollView自動(dòng)滑動(dòng)到底部的方法
這篇文章主要給大家介紹了關(guān)于Android中控制和禁止ScrollView自動(dòng)滑動(dòng)到底部的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對各位Android開發(fā)者們具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧。2017-10-10Android啟動(dòng)模擬器報(bào)錯(cuò)解決方法
本文將詳細(xì)介紹Android模擬器報(bào)"Failed To Allocate memory 8"錯(cuò)誤的解決辦法,需要了解的朋友可以參考下2012-12-12