這幾天都在折騰RecyclerView添加分組在最開始使用BaseRecyclerViewAdapterHelper這個類庫來解決問題
使用它有個條件得繼承MultiItemEntity,分組也得在添加model一個Group標記,對代碼有入侵不說,我們還有很多不同的類型例如空出一個之類的,都使用model標記,刪除的時候巨痛苦。
前幾天看到Android仿微信通訊錄:懸停頭部分組列表**受到啟發,但里面的是LinearLayoutManager.應用場景沒有覆蓋到自身情況,干脆自己寫一個
ItemDecoration有三個方法需要用到的
- onDraw每次滾動時都會調用到,在這里畫出分欄的圖形
- onDrawOver每次滾動時都會調用到,這里畫出的圖形最位于View的最頂層,下面的圖層都會被覆蓋
3 .getItemOffsets每次顯示新的cell會調用,用于控制cell的margin,這里用于空出分欄高度的位置
下面記得一步步實現的方式 - 為分欄預留位置,由于使用的是GridLayoutManager,需要判斷所在行是不是包含Group標記(也可以抽象成類似UICollectionView的dataSource一樣通過外部判斷)
Paste_Image.png
- 畫出分欄圖形
小心的是onDraw不會幫忙迭代, 我是用First和Last分別找到當前需要繪制的rect,然后上色
Paste_Image.png
- 最后畫出頂部的分欄和產生推動的效果
displayHeaderRect是一個SparseArrayCompat用于記錄當前屏幕分欄的Rect, Rect的坐標和iOS不太一樣所以需要更新top和bottom才會有效果
Paste_Image.png