Android 给RecyclerView添加分割线的具体步骤(分享)

Android 给RecyclerView添加分割线的具体步骤(分享),第1张

概述【吐槽】RecyclerView没有提供分割线的方法,想要加个线还要自己画,点击事件的监听都要自己实现,不过真的好用。

【吐槽】RecyclerVIEw没有提供分割线的方法,想要加个线还要自己画,点击事件的监听都要自己实现,不过真的好用。

给RecyclerVIEw添加分割线的步骤

1、新建类继承于RecyclerVIEw.Itemdecoration,此为是抽象类:

  public static abstract class Itemdecoration {  public voID onDraw(Canvas c,RecyclerVIEw parent,State state) {    onDraw(c,parent);  }  public voID onDrawOver(Canvas c,State state) {    onDrawOver(c,parent);  }  public voID getItemOffsets(Rect outRect,VIEw vIEw,State state) {    getItemOffsets(outRect,((LayoutParams) vIEw.getLayoutParams()).getVIEwLayoutposition(),parent);  }}

“onDraw和onDrawOver,显然,这两个方法是用于绘制的,那么绘制分割线的逻辑可以放在这里面,它们二者的具体区别是:onDraw是在item vIEw绘制之前调用,而onDrawOver是在item vIEw绘制之后调用,因此我们一般选择重写其中一个方法即可。getItemOffsets,这个方法是告诉RecyclerVIEw在绘制完一个item vIEw的时候,应该留下多少空位,以便于绘制分割线。”

好像逻辑也不难,但是真的好麻烦,比如我要给我的瀑布流布局加一条系统自带的分割线,系统自带的就行,那我要新建一个实现类:

public class divIDerItemdecoration extends RecyclerVIEw.Itemdecoration {    //使用系统自带的ListdivIDer    private static final int[] ATTRS = new int[]{        androID.R.attr.ListdivIDer    };    private Drawable mdivIDer;    public divIDerItemdecoration(Context context) {      super();      // 从TypedArray中得到一个Drawable对象      final TypedArray typedArray = context.obtainStyledAttributes(ATTRS);      mdivIDer = typedArray.getDrawable(0);      typedArray.recycle();    }    @OverrIDe    public voID onDraw(Canvas c,RecyclerVIEw.State state) {      super.onDraw(c,parent,state);      drawdivIDer(c,parent);    }    /**     * 遍历childVIEw,为每一个childVIEw描绘divIDer     * @param c 画布对象     * @param parent 父控件即RecyclerVIEw     */    private voID drawdivIDer(Canvas c,RecyclerVIEw parent) {      //获取分割线的上边距,即RecyclerVIEw的padding值      final int top = parent.getpaddingtop();      //分割线下边距      final int bottom = parent.getHeight() - parent.getpaddingBottom();      final int childCount = parent.getChildCount();      //遍历所有item vIEw,为它们的右边方绘制分割线,就是计算出上下左右四个值画一个矩形      for (int i = 0; i < childCount; i++) {        final VIEw child = parent.getChildAt(i);        final RecyclerVIEw.LayoutParams params = (RecyclerVIEw.LayoutParams) child.getLayoutParams();        final int left = child.getRight() + params.rightmargin;        final int right = left + mdivIDer.getIntrinsicWIDth();        //画右边的divIDer        mdivIDer.setBounds(left,top,right,bottom);        mdivIDer.draw(c);        //画完右边画底边        mdivIDer.setBounds(child.getleft() + child.getpaddingleft(),child.getBottom() + params.bottommargin,child.getRight() - child.getpaddingRight(),child.getBottom() + mdivIDer.getIntrinsicHeight());        mdivIDer.draw(c);      }    }    @OverrIDe    public voID getItemOffsets(Rect outRect,RecyclerVIEw.State state) {      super.getItemOffsets(outRect,vIEw,state);      outRect.set(0,mdivIDer.getIntrinsicHeight(),mdivIDer.getIntrinsicHeight());    }  }

2、为RecyclerVIEw添加写好的Itemdecoration即可

mRecyclerVIEw.addItemdecoration(new divIDerItemdecoration(this));

3、没有3。

其实从 RecyclerVIEw.Itemdecoration 的名字就看得出来,它是RecyclerVIEw的item的装饰品,也就是说,除了画分割线,想画什么都是可以的。

以上这篇AndroID 给RecyclerVIEw添加分割线的具体步骤(分享)就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持编程小技巧。

总结

以上是内存溢出为你收集整理的Android 给RecyclerView添加分割线的具体步骤(分享)全部内容,希望文章能够帮你解决Android 给RecyclerView添加分割线的具体步骤(分享)所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/web/1146362.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-31
下一篇 2022-05-31

发表评论

登录后才能评论

评论列表(0条)

保存