当前位置: 移动技术网 > IT编程>移动开发>Android > 万能RecyclerView分割线

万能RecyclerView分割线

2019年07月24日  | 移动技术网IT编程  | 我要评论

暗影征服者在哪换,二本c类,结婚要买什么东西

就不多叙述了,直接上代码

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));

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持移动技术网。

如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复

相关文章:

验证码:
移动技术网