地表最强 RecyclerView 分割线 Y_DividerItemDecoration 2.0

前言

自上一次发表 《妈妈再也不用担心我的Recyclerview分割线了》 一转眼已经过去两个多月了,中间很多网友提了不少问题和期望。这段时间一直在起早贪黑的赶项目,有时候闲下来偷偷优化了代码但是没提交到github,也没时间写文档。昨天项目第一阶段刚结束我就静下心来将代码重新进行了梳理和改造。写完我就感觉如果上次 1.0 是《妈妈再也不担心》系列的话,那这一次 2.0 称为《地表最强》系列绝不为过。

首先,再次抛出我对分割线最终奥义的理解。

分割线的奥义

无外乎两点:

  • 在哪里显示(哪个Item?Item的上下左右?)
  • 显示什么 (宽多少?啥颜色?padding?...)

1.0 版和 2.0 版最大的区别在于,1.0 对分割线的控制粒度只细分到了每个条目,而 2.0 版是可以单独精确的控制到每一个条目的每一条边的,跟分割线的最终奥义已经很接近了,你说牛逼不牛逼。

先上项目地址...

Y_DividerItemDecoration 项目地址

Y_DividerItemDecoration

接下来我们来详细看一下 2.0 版到底有哪些牛逼的特性...

2.0 Features

  • LinearLayoutManager和GridViewLayoutManager通用
  • 以每个item的上、下、左、右每条边为控制单位
  • 可以单独控制每边是否显示
  • 可以单独控制每边的颜色
  • 可以单独控制每边的宽度
  • 可以单独控制每边的 startPadding 和 endPadding

来看效果图

图1 LinearLayoutManager

图2 大分割线GridViewLayoutManager

图2 普通GridViewLayoutManager

图3 异型GridViewLayoutManager

已解决的 1.0 时存在的问题

  1. 不能设置分割线的padding(如图1)
  2. 分割线作为ItemDecoration占用了item的宽度,分割线细的时候不明显,分割线宽的时候可明显看到有无分割线的item宽度明显不一样(解决方案是将中间分割线的宽度分摊到两边的item上,如图2)

Usage

之所以版本号一下提到了 2.0 ,还有一个很重要的原因就是使用的API发生了很大改变,使用了建造者模式(话说现在不使用建造者模式的开源项目还能叫用户友好的开源项目吗?小调侃一下,勿喷 0.0),更科学清晰了,对比起来 1.0 就是乡村野夫。

Step 1

将依赖加入你项目的build.gradle中:

compile 'com.yanyusong.y_divideritemdecoration:y_divideritemdecoration:2.0'复制代码

Step 2

新建一个对象实现抽象类 Y_DividerItemDecoration ,在 getDivider(int itemPosition) 中定义在itemPosition时条目的分割线情况,有无、颜色、宽度、startpadding 和 endpadding 。

    private class DividerItemDecoration extends Y_DividerItemDecoration {

        private DividerItemDecoration(Context context) {
            super(context);
        }

        @Override
        public Y_Divider getDivider(int itemPosition) {
            Y_Divider divider = null;
            switch (itemPosition % 2) {
                case 0:
                    //每一行第一个显示rignt和bottom
                    divider = new Y_DividerBuilder()
                            .setRightSideLine(true, 0xff666666, 10, 0, 0)
                            .setBottomSideLine(true, 0xff666666, 20, 0, 0)
                            .create();
                    break;
                case 1:
                    //第二个显示Left和bottom
                    divider = new Y_DividerBuilder()
                            .setLeftSideLine(true, 0xff666666, 10, 0, 0)
                            .setBottomSideLine(true, 0xff666666, 20, 0, 0)
                            .create();
                    break;
                default:
                    break;
            }
            return divider;
        }
    }复制代码

Step 3

给RecyclerView添加刚才实现的ItemDecoration

 recyclerView.addItemDecoration(new DividerItemDecoration(this));复制代码

赞赏

如果Y_DividerItemDecoration节省了你大量的时间,可否给我买一袋咖啡,让我更加有动力去把它做得更好呢,谢谢!?

支付宝
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值