import android.content.Context; import android.content.res.TypedArray; import android.graphics.Canvas; import android.graphics.Rect; import android.graphics.drawable.Drawable; import android.support.v7.widget.LinearLayoutManager; import android.support.v7.widget.RecyclerView; import android.view.View; public class RecyclerViewItemDecoration extends RecyclerView.ItemDecoration { private Context context; private Drawable divider; private int orientation; private static final int HORIZONTAL_LIST = LinearLayoutManager.HORIZONTAL; private static final int VERTICAL_LIST = LinearLayoutManager.VERTICAL; public static final int[] ARRT = new int[]{ android.R.attr.listDivider }; public RecyclerViewItemDecoration(Context context, int orientation) { this.orientation = orientation; this.context = context; final TypedArray ta = context.obtainStyledAttributes(ARRT); this.divider = ta.getDrawable(0); ta.recycle(); setOrientation(orientation); } private void setOrientation(int orientation) { if (orientation != HORIZONTAL_LIST && orientation != VERTICAL_LIST) { throw new IllegalArgumentException("没有初始化 列表方向"); } } /** * 画竖线 * * @param c * @param parent * @param state */ private void drawVerticalLine(Canvas c, RecyclerView parent, RecyclerView.State state) { int top = parent.getPaddingTop(); int bottom = parent.getHeight() - parent.getPaddingBottom(); final int childCount = parent.getChildCount(); for (int i = 0; i < childCount; i++) { final View child = parent.getChildAt(i); RecyclerView.LayoutParams params = (RecyclerView.LayoutParams) child.getLayoutParams(); final int left = child.getLeft() + params.leftMargin; final int right = child.getRight() + divider.getIntrinsicWidth(); divider.setBounds(left, top, right, bottom); divider.draw(c); } } /** * 画横线 * * @param c * @param parent * @param state */ private void drawHorizontalLine(Canvas c, RecyclerView parent, RecyclerView.State state) { int left = parent.getPaddingLeft(); int right = parent.getWidth() - parent.getPaddingRight(); for (int i = 0; i < parent.getChildCount(); i++) { final View child = parent.getChildAt(i); RecyclerView.LayoutParams params = (RecyclerView.LayoutParams) child.getLayoutParams(); final int top = child.getBottom() + params.bottomMargin; final int bottom = top + divider.getIntrinsicHeight(); divider.setBounds(left, top, right, bottom); divider.draw(c); } } @Override public void onDrawOver(Canvas c, RecyclerView parent, RecyclerView.State state) { if (orientation == HORIZONTAL_LIST) { drawVerticalLine(c, parent, state); } else { drawHorizontalLine(c, parent, state); } } @Override public void getItemOffsets(Rect outRect, View view, RecyclerView parent, RecyclerView.State state) { if (orientation == HORIZONTAL_LIST) { outRect.set(0, 0, 0, divider.getIntrinsicHeight()); } else { outRect.set(0, 0, divider.getIntrinsicWidth(), 0); } } }
<?xml version="1.0" encoding="UTF-8"?> -<shape android:shape="rectangle" xmlns:android="http://schemas.android.com/apk/res/android"> 这里设置线条的颜色 <solid android:color="#458F14"/> <size android:height="1dp"/> </shape>
mRecyclerView.addItemDecoration(new DividerItemDecoration(this, DividerItemDecoration.VERTICAL_LIST)); //在Activity中添加