最近項目中有一個GridView棋盤格式的布局需求。剛好考慮到性能優(yōu)化的問題,打算這次使用RecyclerView去代替GridView。關(guān)于RecyclerView中的例子網(wǎng)上有些很多。無非是設置一下Adapter,通過layoutManager規(guī)范一下View的顯示方式:線性,網(wǎng)格,瀑布流等。但是設置Item分割線的時候網(wǎng)上提供的資料大多是調(diào)用系統(tǒng)Attr中的listDivider 再通過自定義Drawble構(gòu)造樣式。但是這樣處理完之后發(fā)現(xiàn)自己之前l(fā)istview的Divider樣式也被改了。于是打算換種方式進行替換。自己去實現(xiàn)抽象類ItemDecoration中的幾個方法來畫出View中的分隔線
```
public classDividerLineextendsRecyclerView.ItemDecoration {
//畫筆
privatePaintpaint;
//分割線顏色
private intcolor;
//分割線尺寸
private intsize;
publicDividerLine() {
paint=newPaint();
}
@Override
public voidonDrawOver(Canvas c,RecyclerView parent,RecyclerView.State state) {
super.onDrawOver(c,parent,state);
drawHorizontal(c,parent);
drawVertical(c,parent);
}
/**
*設置分割線顏色
*
*@paramcolor顏色
*/
public voidsetColor(intcolor) {
this.color= color;
paint.setColor(color);
}
/**
*設置分割線尺寸
*
*@paramsize尺寸
*/
public voidsetSize(intsize) {
this.size= size;
}
//繪制垂直分割線
protected voiddrawVertical(Canvas c,RecyclerView parent) {
final inttop = parent.getPaddingTop();
final intbottom = parent.getHeight() - parent.getPaddingBottom();
final intchildCount = parent.getChildCount();
for(inti =0;i < childCount;i++) {
finalView child = parent.getChildAt(i);
finalRecyclerView.LayoutParams params = (RecyclerView.LayoutParams) child.getLayoutParams();
final intleft = child.getRight() + params.rightMargin;
final intright = left +size;
c.drawRect(left,top,right,bottom,paint);
}
}
//繪制水平分割線
protected voiddrawHorizontal(Canvas c,RecyclerView parent) {
final intleft = parent.getPaddingLeft();
final intright = parent.getWidth() - parent.getPaddingRight();
final intchildCount = parent.getChildCount();
for(inti =0;i < childCount;i++) {
finalView child = parent.getChildAt(i);
finalRecyclerView.LayoutParams params = (RecyclerView.LayoutParams) child.getLayoutParams();
final inttop = child.getBottom() + params.bottomMargin;
final intbottom = top +size;
c.drawRect(left,top,right,bottom,paint);
}
}
}
```