為RecyclerView新增分割線

2021-08-13 15:41:41 字數 3425 閱讀 1336

由於recyclerview並沒有支援divider這樣的屬性,所以就需要我們自己去實現。這裡主要實現第二種

建立類繼承及recyclerview.itemdecoration

public

class

myitemdecoration

extends

recyclerview.itemdecoration

@override

public

void

getitemoffsets(rect outrect, view view, recyclerview parent, recyclerview.state state)

}

新增建構函式
private drawable mdivider;

// 傳入我們自己定義的 drawableid

public

myitemdecoration(context context, int drawableresid)

}

在ondraw()方法中新增如下**
@override

public

void

ondraw(canvas c, recyclerview parent, recyclerview.state state)

繼續
/**

* 繪製水平分割線

*/private

void

drawhorizontal(canvas canvas, recyclerview parent)

canvas.restore();

}/**

* 繪製豎直分割線

*/private

void

drawvertical(canvas canvas, recyclerview parent)

canvas.restore();

}

上面重要是繪製的**,下面來分析getitemoffsets()方法;
@override

public

void

getitemoffsets(rect outrect, view view, recyclerview parent,recyclerview.state state)

// 判斷當前view是否是最後一列

if (islastcolumn(view,parent))

// 為分割線預留的位置,在測量子view的時候使用

outrect.bottom = bottom;

outrect.right = right;

}

判斷當前view是否是最後一行islastrow(view,parent)
/**

* 是否是最後一行

*/private

boolean

islastrow(view view, recyclerview parent)

判斷當前view是否是最後一列islastcolumn(view,parent)
/**

* 是否是最後一列

*/private

boolean

islastcolumn(view view, recyclerview parent)

得到總的列數
private

intgetspancount( recyclerview parent) else

if (layoutmanager instanceof staggeredgridlayoutmanager)

return spancount;

}

自定義drawable
<?xml version="1.0" encoding="utf-8"?>

xmlns:android=""

android:shape="rectangle" > // 設定形狀為矩形

android:height="50dp"

android:width="50dp"/> 寬度和高度

//漸變色

android:startcolor="@android:color/holo_blue_bright" 開始顏色

android:endcolor="@android:color/holo_blue_dark" 結束顏色

android:centercolor="@android:color/holo_blue_light" 中間色

/>

shape>

類似listview的效果

類似gridview效果

在recyclerview中測量子view的**中

public

void

measurechild(view child, int widthused, int heightused)

}

這句**做了什麼呢 rectinsets=mrecyclerview.getitemdecorinsetsforchild(child);
rect getitemdecorinsetsforchild(view child) 

if (mstate.isprelayout() && (lp.isitemchanged() || lp.isviewinvalid()))

final rect insets = lp.mdecorinsets

; insets.set(0, 0, 0, 0);

// mitemdecorations 我們新增的分割線都存放在這個集合裡面

final int decorcount = mitemdecorations.size();

for (int i = 0

; i < decorcount; i++)

lp.minsetsdirty = false;

return insets;

}

@override

public

void

ondraw(canvas c)

}

為recyclerview新增懸浮view

recyclerview中列表一般使用linearlayoutmanage,其中linearlayoutmanage有方法findviewbyposition position 和findfirstvisibleitemposition,他可以分別用來獲取你指定position的view和第乙個顯示...

為RecyclerView新增精美的分割線

最近由於需求問題,需要寫乙個列表。以前總是使用listview,從來沒有用過recyclerview。所以這次打算嘗試一下。然後就開始動手幹活了。recyclerview布局寫好了。然後寫adapter,一切正常。recyclerview.additemdecoration new divideri...

給RecyclerView新增頭部

最近開發的時候遇到乙個問題,就是scrollview巢狀recyclerview的時候,在高版本的的手機上執行的時候整個頁面是可以正常滾動的,但是在低版本手機上執行的時候recyclerview以上的內容就不會顯示出來了,整個頁面只有recyclerview,並且充滿了整個螢幕,recyclervi...