学习笔记-自定义ItemDecoration

888 阅读1分钟

ItemDecoration

  • RecyclerView.ItemDecoration 允许应用给具体的 View 添加具体的图画或者 layout的偏移,对于绘制 View 直接的分割线,视觉分组边界等等非常有用。

  • 当我们调用 addItemDecoration() 方法添加 decoration 的时候, RecyclerView 就会调用 该类的 onDraw 方法去绘制分割线,也就是说,分割线是绘制出来的。

  • RecyclerView.ItemDecoration 是一个 抽象类, 官方目前只提供了一个 DividerItemDecoration 实现类。

ItemDecoration 方法

 public abstract static class ItemDecoration {
 
		// onDraw 的绘制是在 itemView 绘制之前
        public void onDraw(@NonNull Canvas c, @NonNull RecyclerView parent, @NonNull State state) {
            onDraw(c, parent);
        }

		// onDrawOver 的绘制是在 itemView 绘制之后
        public void onDrawOver(@NonNull Canvas c, @NonNull RecyclerView parent,
                @NonNull State state) {
            onDrawOver(c, parent);
        }
		// 设置指定itemview的 paddingLeft,paddingTop, paddingRight, paddingBottom
        public void getItemOffsets(@NonNull Rect outRect, @NonNull View view,
                @NonNull RecyclerView parent, @NonNull State state) {
            getItemOffsets(outRect, ((LayoutParams) view.getLayoutParams()).getViewLayoutPosition(),
                    parent);
        }
    }

ItemDecoration 绘制区域

outRect