IDividerItemDecoration 自定义分割线

IDividerItemDecoration 自定义分割线_第1张图片
美、静

为什么写这个组件

大家应该都知道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,一个好用,功能强大,但很少用的类。

源码传送门

推荐阅读:

  • piasy的 ItemDecoration分析
  • ItemDecoration实践

你可能感兴趣的:(IDividerItemDecoration 自定义分割线)