recyclerview分割線實現類RecyclerView.ItemDecoration

首先,要知道recyclervie畫線的基本原理。
先畫背景然後設置item的偏移座標,把畫的背景露出來。
具體在recyclrview怎麼實現呢?
通過rv.addItemDecoration方法設置一個RecyclerView.ItemDecoration類
這個類有兩個方法分別是負責畫背景和負責設置item的偏移座標
分別是畫背景方法

onDraw(@NonNull Canvas c, @NonNull RecyclerView parent, @NonNull RecyclerView.State state)

設置item的偏移座標

getItemOffsets(@NonNull Rect outRect, @NonNull View view, @NonNull RecyclerView parent, @NonNull RecyclerView.State state)

我們怎麼給不同的item設置不同的偏移座標呢根據下面代碼得到item adapter positon

int childAdapterPosition=parent.getChildAdapterPosition(view);

然後根據你的畫背景邏輯調用以下方法設置你想要的偏移量

outRect.set(left, top, right, bottom);

top bottom設置相當於上下兩個方向的margin,值越大,這個item與其它的item的間隔就越大。
left right就有點特殊了,它是設置item的擠壓空間。怎麼說呢,本來你item的空間是(0,100px),如果設置了Left的值爲20px則代表item的left方向的空間被擠壓,那麼現在Item空間就是(20px,100px),左邊20px的空間就被擠壓了。item被擠壓後就會露出背景色區域。我們在在ondraw中畫的背景就可以顯示出來了。這樣就會有種分割線的視覺效果。

注意在畫背景景的時候,注意繪製區域,不要有多餘區域或冗雜的繪製算法,這樣會有更好的性能表現,減少了過度繪製區域。
以下幾個api是在繪製背景時常用的api,在onDraw做繪製判段時非常好用。

parent.getChildCount();//當前recyclerview上顯示的item的個數
View view = parent.getChildAt(int index);//當前recycleview得到指定排名的item view有了viw就可以得到adapter positon
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章