這篇文章主要介紹Android怎么實(shí)現(xiàn)側(cè)滑,文中介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們一定要看完!
成都創(chuàng)新互聯(lián)公司是一家專(zhuān)注于網(wǎng)站設(shè)計(jì)制作、成都網(wǎng)站設(shè)計(jì)與策劃設(shè)計(jì),許昌網(wǎng)站建設(shè)哪家好?成都創(chuàng)新互聯(lián)公司做網(wǎng)站,專(zhuān)注于網(wǎng)站建設(shè)十載,網(wǎng)設(shè)計(jì)領(lǐng)域的專(zhuān)業(yè)建站公司;建站業(yè)務(wù)涵蓋:許昌等地區(qū)。許昌做網(wǎng)站價(jià)格咨詢(xún):18980820575先解釋一下這個(gè)標(biāo)題,說(shuō)的是實(shí)現(xiàn)App側(cè)滑返回功能只需要一行代碼就能搞定,怎么做到的我待會(huì)會(huì)說(shuō)。側(cè)滑所指的就是側(cè)滑返回,后面的介紹過(guò)程我將用側(cè)滑表面其意。請(qǐng)看側(cè)滑效果如下圖:
使用
在 Application 初始化
SwipeBackHelper.init(this); // 就這一步操作
本篇不打算長(zhǎng)篇大論解釋原理,只想跟大家說(shuō)一下我的思考。
筆者的項(xiàng)目中也有側(cè)滑返回功能,和很多側(cè)滑的開(kāi)源項(xiàng)目一樣,需要繼承swipeBackActivity基類(lèi),實(shí)現(xiàn)控制側(cè)滑返回方法。我覺(jué)得這是比較乏味的。而且很多側(cè)滑框架需要使用透明主題true(默認(rèn)為false)
<item name="android:windowIsTranslucent">true</item>
這個(gè)屬性在實(shí)際應(yīng)用中是純?cè)趩?wèn)題的它會(huì)引起一系列的動(dòng)畫(huà)問(wèn)題,如前后臺(tái)切換動(dòng)畫(huà)、Activity回退動(dòng)畫(huà)等。還有個(gè)值得注意的是在界面跳轉(zhuǎn)的時(shí)候,發(fā)起跳轉(zhuǎn)的Activity只會(huì)執(zhí)行onPause方法,而不會(huì)執(zhí)行onStop方法。
于是乎我決定改變這個(gè)局面,在這個(gè)過(guò)程中我有三個(gè)方面的考慮:對(duì)項(xiàng)目?jī)A入性,高地版本手機(jī)適配性,主題兼容性。要抓好這三個(gè)點(diǎn),這是我的目的。下面我就這三個(gè)方向具細(xì)的說(shuō)
傾入性
能不能做到不改動(dòng)Activity的就能使它擁有側(cè)滑的能力?答案是肯定的。這里我用到了ActivityLifeCallbacks技術(shù),需要API 14+ 在onActivityCreated函數(shù)里面動(dòng)態(tài)的把側(cè)滑控件植入到布局最頂級(jí),替換之前的將初始化側(cè)滑代碼寫(xiě)在Activity里方式。并且動(dòng)態(tài)的判斷是否第二個(gè)入棧的Activity如果是再植入。因?yàn)榈谝粋€(gè)啟動(dòng)的Activity是不需要側(cè)滑的,比如我們的首頁(yè)界面。
適配性
在適配性方面我希望在高低版本的手機(jī)當(dāng)中側(cè)滑效果是一樣的,不會(huì)出現(xiàn)閃一下的情況
改寫(xiě)swipeBack的時(shí)候,遇到在高版本的手機(jī)當(dāng)中側(cè)滑結(jié)束的時(shí)候有幾率會(huì)閃一下,這讓我很是頭疼不過(guò)也得解決啊。于是我找了其他測(cè)滑庫(kù)也試試看,我發(fā)現(xiàn)一部分也有相同的問(wèn)題,一部分沒(méi)有。于是我進(jìn)一步分析那些不會(huì)閃一下的側(cè)滑庫(kù),發(fā)現(xiàn)他們它們都有一個(gè)共同點(diǎn),就是必須使用透明主題。這種強(qiáng)制要求對(duì)于我來(lái)說(shuō)是不接受的,我一定要解決這個(gè)痛點(diǎn)。為什么會(huì)閃一下?其實(shí)很簡(jiǎn)單,因?yàn)閭?cè)滑結(jié)束的時(shí)候Activity finish會(huì)有一個(gè)退出動(dòng)畫(huà),所以你會(huì)看到閃一下的場(chǎng)景。那我們就把退出動(dòng)畫(huà)"取消吧",于是我將退出動(dòng)畫(huà)設(shè)置成如下:
<set xmlns:android="http://schemas.android.com/apk/res/android" android:interpolator="@android:interpolator/decelerate_quad"> </set>
ps:這個(gè)動(dòng)畫(huà)我是從系統(tǒng)anim里面當(dāng)中找出來(lái)的
做了以上改動(dòng)之后發(fā)現(xiàn)并沒(méi)有徹底解決,雖然閃一下的幾率是大大降低了。左四右想我想我用到另外一種方式。我在dispatchDraw中將前一個(gè)activity界面中的DecorView繪制到當(dāng)前activity中的畫(huà)布上,因?yàn)閐ispatchDraw()方法先執(zhí)行,那么它就會(huì)將activity A中的DecorView繪制到當(dāng)前activity B界面上。接著B(niǎo)進(jìn)入onPause,此時(shí)界面上仍然顯示的是B的內(nèi)容。再接著進(jìn)入A onStart,此時(shí)系統(tǒng)準(zhǔn)備A的界面,將A中的DecorView重新繪制到當(dāng)前A界面中。下來(lái)進(jìn)入A onResume,此時(shí)屏幕上顯示A的界面,同時(shí)隱藏B的界面。因?yàn)锳界面和B界面是同樣的內(nèi)容,所以屏幕的顯示不會(huì)有切換效果
兼容性
在兼容性方面我希望做到兼容透明主題與非透明主題。
因?yàn)檫@個(gè)兩個(gè)選項(xiàng)在每個(gè)項(xiàng)目中都是不固定的,不統(tǒng)一的。不能因?yàn)槭褂昧薙wipeBack就要改變他,這是不太友好的。應(yīng)該更好的對(duì)待它們,兼容它們。處理這一點(diǎn)我用到了反射技術(shù)。反射Activity的convertFromTranslucent方法將透明主題轉(zhuǎn)為不透明兼容兩者。
以上是“Android怎么實(shí)現(xiàn)側(cè)滑”這篇文章的所有內(nèi)容,感謝各位的閱讀!希望分享的內(nèi)容對(duì)大家有幫助,更多相關(guān)知識(shí),歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道!
名稱(chēng)欄目:Android怎么實(shí)現(xiàn)側(cè)滑-創(chuàng)新互聯(lián)
新聞來(lái)源:http://www.rwnh.cn/article20/dhphco.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供關(guān)鍵詞優(yōu)化、企業(yè)建站、小程序開(kāi)發(fā)、全網(wǎng)營(yíng)銷(xiāo)推廣、App開(kāi)發(fā)、網(wǎng)站收錄
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶(hù)投稿、用戶(hù)轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話(huà):028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容