RecyclerView實現複雜頁面
近日,三星Galaxy S8正式釋出,使用了曲屏無邊超大螢幕,屏佔比高達84%。為了獲得更大的屏佔比,S8甚至取消了正面指紋識別的設計,將指紋識別移到了後置攝像頭右側。另外還增加了語音助手Bixby,對蘋果Siri的進行公開叫板。不知道這一旗艦機型能否挽回去年“炸彈”Note 7給公司形象帶來的損害。
作者簡介
本篇來自 哦罷了 的投稿,分享瞭如何使用 RecyclerView 實現多種佈局的列表,希望能夠幫助到大家。最後不要忘記明天還要上班喲!
哦罷了 的部落格地址:
http://blog.csdn.net/iamdingruihaha
正文
相信很多安卓開發的朋友,尤其是剛從事安卓開發的朋友,當產品經理遞過來一張複雜頁面的設計圖時,都會有一種茫然的感覺,在心裡想著如何實現,然後網上搜索如何實現複雜佈局頁面,當初我也是這麼過來的, 可以說踩了很多很大的坑,所以決定寫下這篇部落格 ,供各位猿猿參觀 , 想相信看完此篇,絕對是最後一篇,不用再找了,當然此篇為進階篇。如果你對 RecyclerView 還不熟悉,建議先了解 RecyclerView,熟悉其基本使用。
言歸正傳,先來看一下效果圖:
gif錄出來有點怪,所以就截圖了
下面我來分析一下這種複雜介面的具體實現思路,當然這裡非常感謝 liaoinstan 大神的文章
http://blog.csdn.net/liaoinstan/article/details/52671101
朋友可以看一下,最初我也是看了此篇,但是此篇並非完美,在此我進一步總結一下 。
如果不是瀑布流, 那就很簡單了,借鑑一下liaoinstan的圖片
如果實現此圖,liaoinstan給瞭如下兩種方案
-
第一種
這裡 recyclerview5 應該還是列表管理器, 懶得畫圖了,意思一樣 。
這種方案構思就是 recyclerview 裡面巢狀 多recyclerview,構思簡單,編寫也是行如流水,能夠實現需求,但是問題來了,以下是重點,這種多巢狀的寫法,在上拉載入的時候,拉到後面基本就會很卡,就算釋放glide(或者其他圖片載入框架)的記憶體也是釋放不掉,直至oom或者卡死不動
-
第二種
這種思路里面最重要的方法就是:
liaoinstan大神已經給了具體程式碼和思路,完美實現功能,非常感謝。
如果需求是帶瀑布流的
那麼,第一種情況裡面的 onAttachedToRecyclerView方法 瀑布流管理器裡面就不存在,因此無法使用,只能另尋他法,liaoinstan大神推薦 TwowayView 能實現上圖這種效果,但是, 呵呵,不好意思,當你用TwowayView寫實際應用時, 需要網路載入時, 問題出現了,那就是你來回下拉重新整理幾次,佈局上面就會有一塊白的空白區域, 直至最後你的佈局完全看不見, 只剩下一片白。
我沒有解決此問題。當時我寫我們公司的應用時, 寫到這裡的時候,我就一臉懵逼了, 然後就用最最古老的辦法,直接scrollview裡面巢狀幾個recyclerview,寫到最後還是意料之中出現問題了,上拉載入到最後還是會卡頓,而且在6.0以上高度總是有問題。
到這裡,我差點想和產品說我們不用瀑布流好不好,但我又從新搜了一下,在瀑布流管理器裡面有 LayoutParams.setFullSpan(true) 方法,在:
onCreateViewHolder(ViewGroup parent, int viewType)
總體思路就是,把下面的瀑布流部分作為一種 type,其他無需載入更多的佈局放在 recyclerview 裡面。使用此方法使這一行佔滿全屏,這是我到現在總結出來的最好實現方式。
思路圖如下:
部分程式碼如下:
這個方法 在大神的文章裡只是副作用提了一下, 光想著 TwowayView 了所以沒在意 ,最後還是此方法解決了這種需求。
總結:本人只是理論性的總結了複雜佈局的實現方式,以及一些坑 , 避免各位浪費時間和精力 ,鄙人在此獻醜了,程式碼已經全部上傳,github專案原始碼:
https://github.com/385841539/RecycleviewPage