万能RecyclerView分割线
程序员文章站
2024-02-21 10:07:33
就不多叙述了,直接上代码
import android.content.context;
import android.graphics.canvas;
im...
就不多叙述了,直接上代码
import android.content.context; import android.graphics.canvas; import android.graphics.paint; import android.graphics.rect; import android.support.v7.widget.linearlayoutmanager; import android.support.v7.widget.recyclerview; import android.util.typedvalue; import android.view.view; public class divideritemdecoration extends recyclerview.itemdecoration { /* * recyclerview的布局方向,默认先赋值 * 为纵向布局 * recyclerview 布局可横向,也可纵向 * 横向和纵向对应的分割想画法不一样 * */ private int morientation = linearlayoutmanager.vertical; /** * item之间分割线的size,1---5 */ private int msize; /** * 绘制item分割线的画笔,和设置其属性 * 来绘制个性分割线 */ private paint mpaint; /** * 构造方法传入布局方向,不可不传 * * @param context context * @param orientation 布局方向 * @param color 颜色 * @param mitemsize item之间分割线的size */ public divideritemdecoration(context context, int orientation, int color, int mitemsize) { this.morientation = orientation; /* item之间分割线的颜色 */ this.msize= mitemsize; if (orientation != linearlayoutmanager.vertical && orientation != linearlayoutmanager.horizontal) { throw new illegalargumentexception("linearlayoutmanager error"); } msize = (int) typedvalue.applydimension(mitemsize, typedvalue.complex_unit_dip, context.getresources().getdisplaymetrics()); mpaint = new paint(paint.anti_alias_flag); mpaint.setcolor(color); /*设置填充*/ mpaint.setstyle(paint.style.fill); } @override public void ondraw(canvas c, recyclerview parent, recyclerview.state state) { if (morientation == linearlayoutmanager.vertical) { drawvertical(c, parent); } else { drawhorizontal(c, parent); } } /** * 绘制纵向 item 分割线 * * @param canvas canvas * @param parent parent */ private void drawvertical(canvas canvas, recyclerview parent) { final int left = parent.getpaddingleft(); final int right = parent.getmeasuredwidth() - parent.getpaddingright(); final int childsize = parent.getchildcount(); for (int i = 0; i < childsize; i++) { final view child = parent.getchildat(i); recyclerview.layoutparams layoutparams = (recyclerview.layoutparams) child.getlayoutparams(); final int top = child.getbottom() + layoutparams.bottommargin; final int bottom = top + msize; canvas.drawrect(left, top, right, bottom, mpaint); } } /** * 绘制横向 item 分割线 * * @param canvas canvas * @param parent parent */ private void drawhorizontal(canvas canvas, recyclerview parent) { final int top = parent.getpaddingtop(); final int bottom = parent.getmeasuredheight() - parent.getpaddingbottom(); final int childsize = parent.getchildcount(); for (int i = 0; i < childsize; i++) { final view child = parent.getchildat(i); recyclerview.layoutparams layoutparams = (recyclerview.layoutparams) child.getlayoutparams(); final int left = child.getright() + layoutparams.rightmargin; final int right = left + msize; canvas.drawrect(left, top, right, bottom, mpaint); } } /** * 设置item分割线的size * * @param outrect outrect * @param view view * @param parent parent * @param state state */ @override public void getitemoffsets(rect outrect, view view, recyclerview parent, recyclerview.state state) { if (morientation == linearlayoutmanager.vertical) { outrect.set(0, 0, 0, msize); } else { outrect.set(0, 0, msize, 0); } } }
调用的时候这样写:
复制代码 代码如下:
mrecyclerview.additemdecoration(new divideritemdecoration(this, linearlayoutmanager.vertical, color.red,5));
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。