IDividerItemDecoration 自定义分割线

美、静
美、静

为什么写这个组件

大家应该都知道support包有个类DividerItemDecoration,但观其源码发现写的太保守,其默认使用的系统分割线样式,不能设置divider宽高、color、padding等等;IDividerItemDecoration就是为解决这些问题而存在的。

支持特性

  • divider 宽高设置
  • 自定义divider 颜色
  • padding设置
  • divider 圆角 (TODO)

实现步骤及原理

使用GradientDrawable 替换系统默认Drawable,通过此Drawable可方便设置divider颜色、宽高、padding及圆角等,GradientDrawable能干的它都能实现。

// sample code  drawVertical
canvas.save();
//... 省略
if(mDividerPadding > 0){//设置了padding,调整left和right的值
            left = left + mDividerPadding;
            right = right - mDividerPadding;
        }

        mDivider.setColor(mDividerColor);//自定义color,没设置就用默认值
        final int childCount = parent.getChildCount();
        for (int i = 0; i < childCount; i++) {
            final View child = parent.getChildAt(i);
            parent.getDecoratedBoundsWithMargins(child, mBounds);
            int bottom = mBounds.bottom + Math.round(ViewCompat.getTranslationY(child));
            int top = bottom - mDivider.getIntrinsicHeight();
            if(mVerticalDividerHeight > 0){//如果设置了高度,调整top的值
                top = bottom - mVerticalDividerHeight;
            }

            mDivider.setBounds(left, top, right, bottom);
            //mDivider.setCornerRadius();//设置矩形圆角
            mDivider.draw(canvas);
        }
        canvas.restore();


结语

日常开发需求中,我们常用到应该就是divider的高度、颜色、间距的调整;此类功能简单,但能满足常规需求。写这篇文章不仅仅想说divider,而是想引出RecyclerView的内部类ItemDecoration,一个好用,功能强大,但很少用的类。

源码传送门

推荐阅读:

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容