1、设置分割线代码

public class GridDividerItemDecoration extends RecyclerView.ItemDecoration {    private static final int[] ATTRS = new int[]{android.R.attr.listDivider};    private Drawable mDivider;    public GridDividerItemDecoration(Context context) {        final TypedArray a = context.obtainStyledAttributes(ATTRS);        mDivider = a.getDrawable(0);        //自定义分割线颜色值        mDivider = AppCompatResources.getDrawable(context, R.color.ee_to_353);        a.recycle();    }    @Override    public void onDraw(Canvas c, RecyclerView parent, RecyclerView.State state) {//        drawHorizontal(c, parent);        drawVertical(c, parent);    }    private int getSpanCount(RecyclerView parent) {        // 列数        int spanCount = -1;        RecyclerView.LayoutManager layoutManager = parent.getLayoutManager();        if (layoutManager instanceof GridLayoutManager) {            spanCount = ((GridLayoutManager) layoutManager).getSpanCount();        }        return spanCount;    }    /***     * 绘制水平分割线     * @param c     * @param parent     */    public void drawHorizontal(Canvas c, RecyclerView parent) {        int childCount = parent.getChildCount();        for (int i = 0; i < childCount; i++) {            final View child = parent.getChildAt(i);            final RecyclerView.LayoutParams params = (RecyclerView.LayoutParams) child                    .getLayoutParams();            final int left = child.getLeft() - params.leftMargin;            final int right = child.getRight() + params.rightMargin                    + mDivider.getIntrinsicWidth();            final int top = child.getBottom() + params.bottomMargin;            final int bottom = top + mDivider.getIntrinsicHeight();            mDivider.setBounds(left, top, right, bottom);            mDivider.draw(c);        }    }    /**     * 绘制垂直线     *     * @param c     * @param parent     */    public void drawVertical(Canvas c, RecyclerView parent) {        final int childCount = parent.getChildCount();        //这里固定了,最后一个不用线条        if (childCount <= 0) {            return;        }        for (int i = 0; i < childCount - 1; i++) {            final View child = parent.getChildAt(i);            final RecyclerView.LayoutParams params = (RecyclerView.LayoutParams) child                    .getLayoutParams();            final int top = child.getTop() - params.topMargin;            final int bottom = child.getBottom() + params.bottomMargin;            final int left = child.getRight() + params.rightMargin;            final int right = left + mDivider.getIntrinsicWidth();            mDivider.setBounds(left, 100, right + 2, bottom - 100);            mDivider.draw(c);        }    }    /**     * 是否是最后一行     */    private boolean isLastRow(int itemPosition, RecyclerView parent) {        int spanCount = getSpanCount(parent);        RecyclerView.LayoutManager layoutManager = parent.getLayoutManager();        //有多少列        if (layoutManager instanceof GridLayoutManager) {            int childCount = parent.getAdapter().getItemCount();            double count = Math.ceil((double) childCount / (double) spanCount);//总行数            double currentCount = Math.ceil((double) (itemPosition + 1) / spanCount);//当前行数            //最后当前数量小于总的            if (currentCount < count) {                return false;            }        }        return true;    }    /**     * 判断是否是最后一列     */    private boolean isLastColum(int itemPosition, RecyclerView parent) {        RecyclerView.LayoutManager layoutManager = parent.getLayoutManager();        //有多少列        if (layoutManager instanceof GridLayoutManager) {            int spanCount = getSpanCount(parent);            //因为是从0可以所以要将ItemPosition先加1            if ((itemPosition + 1) % spanCount == 0) {                return true;            }        }        return false;    }    @Override    public void getItemOffsets(Rect outRect, View view, RecyclerView parent, RecyclerView.State state) {        super.getItemOffsets(outRect, view, parent, state);        // 如果是最后一行,则不需要绘制底        if (isLastRow(parent.getChildLayoutPosition(view), parent)) {            outRect.set(0, 0, 0, mDivider.getIntrinsicHeight());        }        // 如果是最后一列,则不需要绘制右边        if (isLastColum(parent.getChildLayoutPosition(view), parent)) {            outRect.set(0, 0, mDivider.getIntrinsicWidth(), 0);        }    }}

2、调用

 GridLayoutManager manager = new GridLayoutManager(getContext(),3); recyclerView.setLayoutManager(manager); GridDividerItemDecoration decoration = new GridDividerItemDecoration(getContext()); recyclerView.addItemDecoration(decoration);

更多相关文章

  1. android自定义View绘制几何图形
  2. 手写功能,撤回上一步,清空,保存 功能
  3. OpenGl-ES2.0 For Android(安卓)读书笔记(一)
  4. android虚拟键盘实现
  5. Android使用SurfaceView画图
  6. TextView源码解析-----绘制过程
  7. 自定义开关控件(ToggleView)继承View实现
  8. miui卸载爆炸效果
  9. Drawables:9-patch

随机推荐

  1. Android学习之键盘事件
  2. MyBaseAdapter
  3. Android(安卓)Studio默认产生Fragment
  4. 百度地图API学习笔记(四)
  5. android中有这么些个SystemService,挨个儿
  6. AudioTrack&AudioFlinger
  7. Android模拟强制下线通知功能实例代码
  8. [Android]什么是OOB(Opaque binary blob)
  9. 一分钟解决Shape分割线及分割线圆角框
  10. android沉浸式状态栏和状态栏字体设置工