分割线类

import android.graphics.Canvas;import android.graphics.Color;import android.graphics.Paint;import android.graphics.Rect;import android.support.v7.widget.GridLayoutManager;import android.support.v7.widget.LinearLayoutManager;import android.support.v7.widget.RecyclerView;import android.view.View;/** * Created by Relin on 2019/08/05. * RecyclerView Item的分割线 */public class DividerItemDecoration extends RecyclerView.ItemDecoration {    /**     * Item分割方向     */    private int mOrientation;    /**     * item之间分割线的size     */    private int size;    /**     * 绘制item分割线的画笔,和设置其属性     * 来绘制个性分割线     */    private Paint mPaint;        /**     * @param orientation     */    public DividerItemDecoration(int orientation) {        this.mOrientation = orientation;        init(orientation, Color.parseColor("#EBEBEB"), 2);    }    /**     * @param orientation     * @param color     */    public DividerItemDecoration(int orientation, int color) {        this.mOrientation = orientation;        init(orientation, color, 2);    }    /**     * @param orientation     * @param color     * @param size     */    public DividerItemDecoration(int orientation, int color, int size) {        this.mOrientation = orientation;        init(orientation, color, size);    }    /**     * @param orientation     * @param color     * @param size     */    private void init(int orientation, int color, int size) {        if (orientation != LinearLayoutManager.VERTICAL && orientation != LinearLayoutManager.HORIZONTAL) {            throw new IllegalArgumentException("请传入正确的参数");        }        this.size = size;        mPaint = new Paint(Paint.ANTI_ALIAS_FLAG);        mPaint.setStrokeWidth(size);        mPaint.setColor(color);        /*设置填充*/        mPaint.setStyle(Paint.Style.FILL);    }    @Override    public void onDraw(Canvas c, RecyclerView parent, RecyclerView.State state) {        if (mOrientation == LinearLayoutManager.VERTICAL) {            drawVertical(c, parent);        } else {            drawHorizontal(c, parent);        }    }    /**     * 绘制纵向 item 分割线     *     * @param canvas     * @param parent     */    private void drawVertical(Canvas canvas, RecyclerView parent) {        final int left = parent.getPaddingLeft();        final int right = parent.getMeasuredWidth() - parent.getPaddingRight();        final int childSize = parent.getChildCount();        for (int i = 0; i < childSize; i++) {            final View child = parent.getChildAt(i);            RecyclerView.LayoutParams layoutParams = (RecyclerView.LayoutParams) child.getLayoutParams();            final int top = child.getBottom() + layoutParams.bottomMargin;            int bottom = top + size;            if (i != (childSize - 1)) {                canvas.drawRect(left, top, right, bottom, mPaint);            }        }    }    /**     * 绘制横向 item 分割线     *     * @param canvas     * @param parent     */    private void drawHorizontal(Canvas canvas, RecyclerView parent) {        final int top = parent.getPaddingTop();        final int bottom = parent.getMeasuredHeight() - parent.getPaddingBottom();        final int childSize = parent.getChildCount();        for (int i = 0; i < childSize; i++) {            final View child = parent.getChildAt(i);            RecyclerView.LayoutParams layoutParams = (RecyclerView.LayoutParams) child.getLayoutParams();            final int left = child.getRight();            final int right = left + size + layoutParams.rightMargin;            canvas.drawRect(left, top, right, bottom, mPaint);        }    }    /**     * 设置item分割线的size     *     * @param outRect     * @param view     * @param parent     * @param state     */    @Override    public void getItemOffsets(Rect outRect, View view, RecyclerView parent, RecyclerView.State state) {        int position = parent.getChildLayoutPosition(view);        int count = state.getItemCount();        if (mOrientation == LinearLayoutManager.VERTICAL) {            outRect.set(0, 0, 0, size);        } else {            //如果是Grid不需要绘制每行最后一个的分割线            if (parent.getLayoutManager() != null && parent.getLayoutManager() instanceof GridLayoutManager) {                GridLayoutManager gridLayoutManager = (GridLayoutManager) parent.getLayoutManager();                int spanCount = gridLayoutManager.getSpanCount();                if ((position + 1) % spanCount == 0) {                    return;                }            }            outRect.set(0, 0, size, 0);        }    }}

使用

//注意,需要放在设置LayoutManager之后,以为类里面自动判断了Layout类型//添加横向分割线recyclerView.addItemDecoration(new DividerItemDecoration(LinearLayoutManager.HORIZONTAL,ContextCompat.getColor(getContext(), R.color.colorDivider),2));//添加纵向分割线recyclerView.addItemDecoration(new DividerItemDecoration(LinearLayoutManager.VERTICAL, ContextCompat.getColor(getContext(), R.color.colorDivider),2));

更多相关文章

  1. 在Android(安卓)WebView中设置Cookie
  2. Android(安卓)自定义ProgressBar--进度自己设置图片
  3. Android(安卓)Studio 自带的侧滑布局设置
  4. android webview无网络情况下的处理
  5. android使用webview加载网页
  6. android 之关卡锁的实现
  7. Android(安卓)UI控件详解-Gallery(画廊)
  8. Android(安卓)UI控件详解-ImageSwitcher(图片切换器)
  9. android 开源项目(城市定位)

随机推荐

  1. SQLServer2005触发器提示其他会话正在使
  2. SQL的SUBSTR()函数使用介绍
  3. SQLSERVER分布式事务使用实例
  4. SQL Server存储过程生成insert语句实例
  5. SQL字符串处理函数大全
  6. SQL Server数据库重命名、数据导出的方法
  7. SQLSERVER ISNULL 函数与判断值是否为空
  8. C#连接Excel2003和Excel2007以上版本做数
  9. 关于sql和mysql对于别名不能调用的一些理
  10. MS SQL Server数据库清理错误日志的方法