package com.cuateng.office2.adapter; import android.content.Context; import android.content.res.TypedArray; import android.graphics.Canvas; import android.graphics.Paint; import android.graphics.Rect; import android.graphics.drawable.Drawable; import android.support.v7.widget.LinearLayoutManager; import android.support.v7.widget.RecyclerView; import android.util.TypedValue; import android.view.View; import com.cuateng.office2.App; import com.cuateng.office2.R; /** * author li Xiao hui on 2017/1/21 13:59 */ public class RecycleViewDivider extends RecyclerView.ItemDecoration { private Drawable mDivider; private int mDividerHeight ;//分割线高度,默认为1dp private int mOrientation;//列表的方向:LinearLayoutManager.VERTICAL或LinearLayoutManager.HORIZONTAL /** * @param context 上下文 * @param orientation 列表方向 */ public RecycleViewDivider(Context context, int orientation) { if (orientation != LinearLayoutManager.VERTICAL && orientation != LinearLayoutManager.HORIZONTAL) { throw new IllegalArgumentException("请输入正确的参数!"); } mDividerHeight = dpToPx(1); mOrientation = orientation; mDivider = context.getResources().getDrawable(R.drawable.shape_task_bottom_line); } @Override public void getItemOffsets(Rect outRect, View view, RecyclerView parent, RecyclerView.State state) { super.getItemOffsets(outRect, view, parent, state); outRect.set(0, 0, 0, mDividerHeight); } //绘制分割线 @Override public void onDraw(Canvas c, RecyclerView parent, RecyclerView.State state) { super.onDraw(c, parent, state); if (mOrientation == LinearLayoutManager.VERTICAL) { drawHorizontal(c, parent); } else { drawVertical(c, parent); } } private void drawHorizontal(Canvas canvas, RecyclerView parent) { final int left = parent.getPaddingLeft(); final int right = parent.getWidth() - parent.getPaddingRight(); final int childCount = parent.getChildCount(); for (int i = 0; i < childCount; i++) { View child = parent.getChildAt(i); RecyclerView.LayoutParams params = (RecyclerView.LayoutParams) child.getLayoutParams(); final int top = child.getBottom() + params.bottomMargin; final int bottom = top + mDividerHeight; mDivider.setBounds(left, top, right, bottom); mDivider.draw(canvas); } } private void drawVertical(Canvas canvas, RecyclerView parent) { int top = parent.getPaddingTop(); int bottom = parent.getMeasuredHeight() - parent.getPaddingBottom(); int count = parent.getChildCount(); for (int i = 0; i < count; i++) { View child = parent.getChildAt(i); RecyclerView.LayoutParams params = (RecyclerView.LayoutParams) child.getLayoutParams(); int left = child.getRight()+params.rightMargin; int right = left + mDividerHeight; mDivider.setBounds(left,top,right,bottom); mDivider.draw(canvas); } } private int dpToPx(int dp) { return (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, dp, App.getInstance().getResources().getDisplayMetrics()); } }
RecycleView添加横向分割线
最新推荐文章于 2024-05-11 15:34:49 发布