首先,在activity中:
localVideoRecycView.addItemDecoration(new GridItemDecorator(this)); localVideoRecycView.setLayoutManager(new GridLayoutManager(this, 3));调用ItemDecoration方法
class GridItemDecorator extends RecyclerView.ItemDecoration { private final Drawable mDivider; public GridItemDecorator(Context context) { mDivider = context.getResources().getDrawable(R.drawable.dividing_line); } @Override public void onDraw(Canvas c, RecyclerView parent, RecyclerView.State state) { super.onDraw(c, parent, state); drawVertical(c, parent); drawHorizontal(c, parent); } // 绘制垂直方向分割线 private void drawVertical(Canvas c, RecyclerView parent) { int childCount = parent.getChildCount(); for (int i = 0; i < childCount; i++) { View child = parent.getChildAt(i); RecyclerView.LayoutParams params = (RecyclerView.LayoutParams) child.getLayoutParams(); int left = child.getRight() + params.rightMargin; int top = child.getTop() - params.topMargin; int right = left + mDivider.getIntrinsicWidth(); int bottom = child.getBottom() + params.bottomMargin; mDivider.setBounds(left, top, right, bottom); mDivider.draw(c); } } // 绘制水平方向分割线 private void drawHorizontal(Canvas c, RecyclerView parent) { int childCount = parent.getChildCount(); for (int i = 0; i < childCount; i++) { View child = parent.getChildAt(i); RecyclerView.LayoutParams params = (RecyclerView.LayoutParams) child.getLayoutParams(); int left = child.getLeft() - params.leftMargin; int top = child.getBottom() + params.bottomMargin; int right = child.getRight() + params.rightMargin; int bottom = top + mDivider.getMinimumHeight(); mDivider.setBounds(left, top, right, bottom); mDivider.draw(c); } } @Override public void getItemOffsets(Rect outRect, int itemPosition, RecyclerView parent) { super.getItemOffsets(outRect, itemPosition, parent); int right = mDivider.getIntrinsicWidth(); int bottom = mDivider.getIntrinsicHeight(); if (isLastSpan(itemPosition, parent)) { right = 0; } if (isLastRow(itemPosition, parent)) { bottom = 0; } outRect.set(0, 0, right, bottom); } // 判断是否是最后一行 public boolean isLastRow(int itemPosition, RecyclerView parent) { RecyclerView.LayoutManager layoutManager = parent.getLayoutManager(); if (layoutManager instanceof GridLayoutManager) { int spanCount = ((GridLayoutManager) layoutManager).getSpanCount(); int itemCount = parent.getAdapter().getItemCount(); if ((itemCount - itemPosition - 1) < spanCount) { return true; } } return false; } // 判断是否是最后一列 public boolean isLastSpan(int itemPosition, RecyclerView parent) { RecyclerView.LayoutManager layoutManager = parent.getLayoutManager(); if (layoutManager instanceof GridLayoutManager) { int spanCount = ((GridLayoutManager) layoutManager).getSpanCount(); if ((itemPosition + 1) % spanCount == 0) { return true; } } return false; } }
然后重写GridItemDecorator方法,在这里,我重写的GridItemDecorator实现的是将屏幕划分为三等份,靠近屏幕端的上下左右没有分割线
如图