RecyclerView分隔线定制
Posted 安卓笔记侠
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了RecyclerView分隔线定制相关的知识,希望对你有一定的参考价值。
分割线我们利用RecyclerView的addItemDecoration(ItemDecoration fromhtml) 新建一个类来看看到底是什么:
public class CategoryItemDecoration extends RecyclerView.ItemDecoration { @Override public void onDraw(Canvas c, RecyclerView parent, RecyclerView.State state) { } @Override public void getItemOffsets(Rect outRect, View view, RecyclerView parent, RecyclerView.State state) { } }
有两个方法getItemOffsets()这里我一般指定偏移量就可以了,就是分割线占多少高度,或者说是画在什么位置,你总的给我留出位置来;onDraw()我们可以直接去绘制,绘制什么都可以因为有Canvas ,但一般都是绘制Drawable。
public class CategoryItemDecoration extends RecyclerView.ItemDecoration { private Paint mPaint; public CategoryItemDecoration(int color) { // 直接绘制颜色 只是用来测试 mPaint = new Paint(); mPaint.setColor(color); mPaint.setAntiAlias(true); } @Override public void onDraw(Canvas c, RecyclerView parent, RecyclerView.State state) { int childCount = parent.getChildCount(); // 获取需要绘制的区域 Rect rect = new Rect(); rect.left = parent.getPaddingLeft(); rect.right = parent.getWidth() - parent.getPaddingRight(); for (int i = 0; i < childCount; i++) { View childView = parent.getChildAt(i); rect.top = childView.getBottom(); rect.bottom = rect.top + 20; // 直接利用Canvas去绘制一个矩形 在留出来的地方 c.drawRect(rect, mPaint); } } @Override public void getItemOffsets(Rect outRect, View view, RecyclerView parent, RecyclerView.State state) { // 在每个子View的下面留出20px来画分割线 outRect.bottom += 20; } }
2.RecyclerView源码解析 - 分割线
猜想: 既然考虑了分割线,那么子View在测量时候肯定要去考虑分割线留出的位置 直接measureChild()方法
猜想: 分割线会调用绘制的方法 onDraw()
以上是关于RecyclerView分隔线定制的主要内容,如果未能解决你的问题,请参考以下文章
Android - 如何为 RecyclerView 添加点划线分隔线?
在 Recyclerview Kotlin 的顶部、中间和底部添加分隔线