recyclerview分割线实现类RecyclerView.ItemDecoration

首先,要知道recyclervie画线的基本原理。
先画背景然后设置item的偏移坐标,把画的背景露出来。
具体在recyclrview怎么实现呢?
通过rv.addItemDecoration方法设置一个RecyclerView.ItemDecoration类
这个类有两个方法分别是负责画背景和负责设置item的偏移坐标
分别是画背景方法

onDraw(@NonNull Canvas c, @NonNull RecyclerView parent, @NonNull RecyclerView.State state)

设置item的偏移坐标

getItemOffsets(@NonNull Rect outRect, @NonNull View view, @NonNull RecyclerView parent, @NonNull RecyclerView.State state)

我们怎么给不同的item设置不同的偏移坐标呢根据下面代码得到item adapter positon

int childAdapterPosition=parent.getChildAdapterPosition(view);

然后根据你的画背景逻辑调用以下方法设置你想要的偏移量

outRect.set(left, top, right, bottom);

top bottom设置相当于上下两个方向的margin,值越大,这个item与其它的item的间隔就越大。
left right就有点特殊了,它是设置item的挤压空间。怎么说呢,本来你item的空间是(0,100px),如果设置了Left的值为20px则代表item的left方向的空间被挤压,那么现在Item空间就是(20px,100px),左边20px的空间就被挤压了。item被挤压后就会露出背景色区域。我们在在ondraw中画的背景就可以显示出来了。这样就会有种分割线的视觉效果。

注意在画背景景的时候,注意绘制区域,不要有多余区域或冗杂的绘制算法,这样会有更好的性能表现,减少了过度绘制区域。
以下几个api是在绘制背景时常用的api,在onDraw做绘制判段时非常好用。

parent.getChildCount();//当前recyclerview上显示的item的个数
View view = parent.getChildAt(int index);//当前recycleview得到指定排名的item view有了viw就可以得到adapter positon

你可能感兴趣的:(android)