RecyclerView的自定义ItemDecoration

大家先来看看最终的效果:

在这里插入图片描述

首先需要写一个RecyclerView item的条目颜色为淡淡的透明红色这里看下代码就好就不细讲了~**

在这里插入图片描述

然后自定义一个类继承自RecyclerView.ItemDecoration重写3个方法

  • public void onDraw(@NonNull Canvas c, @NonNull RecyclerView parent, @NonNull RecyclerView.State state) {}
  • public void onDrawOver(@NonNull Canvas c, @NonNull RecyclerView parent, @NonNull RecyclerView.State state) {}
  • public void getItemOffsets(@NonNull Rect outRect, @NonNull View view, @NonNull RecyclerView parent, @NonNull RecyclerView.State state) {}
    在这里插入图片描述
    outRect.left = 210; 是设置条目距离父容器210dp
    outRect.bottom = 10; 是设置距离下一个子条目10dp
    以此类推也有:
    outRect.right= 210;
    outRect.top= 10; 方法(这里只需要设置这两个就好)

现在就已经可以看到条目已经向右移动了210dp,向下移动了10dp
然后接下来的任务就是在210dp中间画圆和话直线.
在这里插入图片描述
parent.getChildCount();此方法是获取当前可见item的个数 比如说现在条目是0-18这里返回结果就是19
parent.getLayoutManager();此方法是获取RecyclerView的布局管理器,目的就是为了获取当前子item的宽和高.
int l = layoutManager.getLeftDecorationWidth(childView); //距离父容器左边的距离
int r = layoutManager.getRightDecorationWidth(childView);//距离父容器右边的距离
int t = layoutManager.getTopDecorationHeight(childView);//距离父容器上边的距离
int b = layoutManager.getBottomDecorationHeight(childView);//距离父容器下边的距离

parent.getChildAt(int index);此方法是获取当前子条目的View

接下来就可以画圆了!
int x = l/2; //获取圆的x位置
int y = childView.getTop()+(childView.getHeight()/2);//获取圆的y位置
可能会有不懂的朋友会问到这里为什么要加childView.getTop()呢.因为如果不加childView.getTop()的话只能获取到一个固定的点,只会显示一个圆点,childView.getTop()是会随着item的变化而变化的.所以这里必须加上childView.getTop()最后画圆和画线思路都是一样的.

Android小白写博客不为了求关注求赞,只是当笔记来写的,若大佬们看到了此篇文章可以留下宝贵的建议~~

猜你喜欢

转载自blog.csdn.net/weixin_44819566/article/details/106020235