recyclview-系列效果(分组,吸顶,分割线)

recycleView

基本的使用与说明不再赘述,本文主要是通过ItemDecration 实现 分割线,分组 吸顶等效果;学习前你需要知道getTop getBottom 都是指的什么,如果还存在疑惑,可以看看这篇文章
[view坐标系详解](https://blog.csdn.net/u013872857/article/details/53750682)

主要的方法

要实现上述功能,需要通过I自定义itemDecration ;首先你需要了解这些方法:

  1. getItemOffsets(Rect outRect, View view, RecyclerView parent, RecyclerView.State state);
    –item的偏移,通过该方法,可以设置item之间预留位置,一般设置分割线需要先在该方法下设置好偏移量;

  2. onDraw(Canvas c, RecyclerView parent, RecyclerView.State state);
    –绘制前调用的,参数有canva 所以可以发现可以绘制一些内容,上个方法只能预留出位置,展示的颜色只能是背景色,想要绘制更加丰富的内容需要重写这个方法;需要注意的是** 该方法绘制的内容,如果计算出现问题,是会被itemView覆盖的**

  3. 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
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值