天天看點

recycleview橫向展開_Android Recyclerview Expand item 展開動畫

另附上視訊:

Android 中間展開動畫.mp4

之前看到飛書月視圖在清單中點選,在上下兩個item之間展開,想到ExpandableListView似乎有類似的操作,但是還無法滿足需求,後來看到有個demo是recyclerview的展開效果,附上位址:

RecyclerView: Animate item resize

雖然依然無法滿足需求,但是思路很清晰,點選的時候做屬性動畫,增加或減小expandview的大小來達到展開的效果;

當時看到這個demo的時候依然有幾個問題需要解決:

1、目标實作是多列的,每一行下方會對應一個可橫向滾動的布局,對應該行的列,每次點選不同的列,會切換下方滾動,而不會收起,隻有點選了同一列才會收起

2、點選不同的行,先收起,再展開

3、目标實作item本身會滾動到頂部,将下一個item滾到到底部

4、每一行對應的滾動布局即ExpandView是靜止不動的

帶着這幾個問題咱們來一一解決:

1、最初是設想使用GridLayoutManager來解決多列的問題,發現①下方滾動布局無法展開;②收起時,需要做多列的處理,于是想到了其實可以是一列,隻是展示成多列的樣子,于是我使用了兩個textview放到了一行中(多列的話,可以使用RecyclerView),展示出來雖然是多列的樣子,實際還是一列,下方則用viewpager來作為滾動布局,監聽互動

2、既然是屬性動畫,那就可以監聽動畫的開始和結束,當點選不同行時,先進行關閉動畫,在關閉動畫結束時,進行展開動畫,隻需提前輸入要展開的布局即可

3、我在外圍使用了LinearLayout,當目标item展開時候,使用LinearLayout.LayoutParams的topMargin達到使item滾動到頂部的效果

4、ExpandView靜止不動,其實也可以使用LinearLayout.LayoutParams的topMargin來解決,既然是相對靜止,那設定成與Item本身不同的值即可,但是這時候引來了别的問題,ExpandView設定topMargin展示在Title的Z軸方向上方,這樣就無法達成效果了,後來把Title的Z軸太高,并且設定透明背景即可

當然因為是demo,是以我并沒有太在意代碼樣式和規範,各位可自行優化