recycleView
基本的使用与说明不再赘述,本文主要是通过ItemDecration 实现 分割线,分组 吸顶等效果;学习前你需要知道getTop getBottom 都是指的什么,如果还存在疑惑,可以看看这篇文章
[view坐标系详解](https://blog.csdn.net/u013872857/article/details/53750682)
主要的方法
要实现上述功能,需要通过I自定义itemDecration ;首先你需要了解这些方法:
-
getItemOffsets(Rect outRect, View view, RecyclerView parent, RecyclerView.State state);
–item的偏移,通过该方法,可以设置item之间预留位置,一般设置分割线需要先在该方法下设置好偏移量; -
onDraw(Canvas c, RecyclerView parent, RecyclerView.State state);
–绘制前调用的,参数有canva 所以可以发现可以绘制一些内容,上个方法只能预留出位置,展示的颜色只能是背景色,想要绘制更加丰富的内容需要重写这个方法;需要注意的是** 该方法绘制的内容,如果计算出现问题,是会被itemView覆盖的** -
onDrawOver(Canvas c, RecyclerView parent, RecyclerView.State state);
–绘制后调用,会覆盖itemView,一般用于可以用来绘制分组和吸顶效果
分割线
@Override
public void getItemOffsets(Rect outRect, View view, RecyclerView parent, RecyclerView.State state) {
super.getItemOffsets(outRect, view, parent, state);
int pos = parent.getChildAdapterPosition(view);
//只要不是第一组就需要设置分割线
if (pos != 0) {
outRect.top = 1;
}
}
- 首先需要 在该方法里面设置好偏移量, outRect.top 表示从第二个item开始距离上衣个item预留出1的高度;其实就这样也可以满足要求,只是分割线的颜色就是背景色,想要定制这条线,可以使用下例;
public class SectionDecoration<T extends IndexIml> extends RecyclerView.ItemDecoration {
private static final String TAG = "SectionDecoration";
private List<T> dataList;
private DecorationCallback callback;
private Paint paint;
private int dvidedHeight;
/**
* @param dataList 数据源 需继承 IndexIml
* @param context
* @param decorationCallback
* @param resId 悬浮条的背景色值
*/
public SectionDecoration(List<T> dataList, Context context, DecorationCallback decorationCallback, int resId) {
Resources res = context.getResources();
this.dataLi