飞龙在天4,志在千里前一句,家电控制器
分割线我们利用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()
如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复
Android studio开发小型对话机器人app(实例代码)
Android通过Java sdk的方式接入OpenCv的方法
Android 通过cmake的方式接入opencv的方法步骤
Android Studio finish()方法的使用与解决app点击“返回”(直接退出)
Android 进度条 ProgressBar的实现代码(隐藏、出现、加载进度)
网友评论