效果图:

ItemDecoration(翻译 Item装饰)
这玩意儿我一只以为只是用来绘制分割线的,没想到他的作用是:让item之间留出空隙,然后跟自定义View一样能随意的绘制想要的东西。

DividerItemDecoration(翻译 分割线 – item – 装饰)
系统提供了默认的 DividerItemDecoration

看看系统给的是怎么写的
getItemOffsets
设置哪块区域需要空出来,距离多少!!!
outRect.set(int left, int top, int right, int bottom)
这里就设置了,如果是VERTICAL,那就下面空出mDivider.getIntrinsicHeight()这点距离

空出来的距离,是独立的,不包含在item里

onDraw
绘制getItemOffsets空出来区域的自定义View效果
onDraw跟自定义的onDraw差不多。
绘制顺序是 onDraw —> 加载item —> onDrawOver()
所以onDrawOver里绘制的会覆盖 item 会覆盖 onDraw
也就是一般分割线这样的(随item可动的,在onDraw里)
不可动的View 在onDrawOver 里
如果是VERTICAL就绘制VERTICAL的


onDrawOver
跟onDraw一样,不过绘制出来的会覆盖,item
不可动的View 在onDrawOver 里绘制
MyItemDecoration — 自定义的
也是实现getItemOffsets、onDraw、onDrawOver
getItemOffsets
int position = parent.getChildAdapterPosition(view);
如果是头,那就空100dp(画tab View)不然就空1dp(画分割线)

onDraw

现在效果,还得画顶部长留的吸顶

onDrawOver
1.找到可见的第一个item,判断它是否是头部。
2.如果不是头,那就在顶部绘制一个这样的框

3.如果是头,那就底部可能被推上去一点。所以底边是
画出来的宽度 — 和 — 上一个view底部小一点那个

1.LinearLayoutManager.findFirstVisibleItemPosition() //可见区域的第一个item的position
2.View view = parent.findViewHolderForAdapterPosition(position).itemView; //取position位置的view ViewHolder的itemView就是

3.boolean isGroupHead = adapter.isGourpHeader(position + 1 );//判断是否是头

完整代码



















![[02/27][官改] Simplicity@MIX2 ROM更新-一一网](https://www.proyy.com/wp-content/uploads/2020/02/3168457341.jpg)


![[桜井宁宁]COS和泉纱雾超可爱写真福利集-一一网](https://www.proyy.com/skycj/data/images/2020-12-13/4d3cf227a85d7e79f5d6b4efb6bde3e8.jpg)

![[桜井宁宁] 爆乳奶牛少女cos写真-一一网](https://www.proyy.com/skycj/data/images/2020-12-13/d40483e126fcf567894e89c65eaca655.jpg)