Android开发RecycleView的Item分割线

来源:互联网 发布:软件著作权转让合同 编辑:程序博客网 时间:2024/05/01 19:07
    /** * @name RecypricleView * @class name:com.vincent.recycleview * @class describe * @anthor Vincent QQ:1032006226 * @time 2017/7/19 0:13 * @change * @chang time * @class describe */public class DividerItemDecoration extends RecyclerView.ItemDecoration {    private static final int[] ATTRS = new int[]{android.R.attr.listDivider};    public static final  int HORIZONTAL_LIST = LinearLayoutManager.HORIZONTAL;    public static final int VERTICAL_LIST = LinearLayoutManager.VERTICAL;    private Drawable mDivider;    private  int mOrientation;    public DividerItemDecoration(Context context,int orientation){        final TypedArray a = context.obtainStyledAttributes(ATTRS);        mDivider = a.getDrawable(0);        a.recycle();        setOrientation(orientation);    }    private void setOrientation(int orientation) {        if(orientation != HORIZONTAL_LIST && orientation != VERTICAL_LIST){            throw new IllegalArgumentException("invalid orientation");        }        mOrientation = orientation;    }    @Override    public void onDraw(Canvas c, RecyclerView parent, RecyclerView.State state) {        if(mOrientation == VERTICAL_LIST){            drawVertical(c,parent);        }else {            drawHorizontal(c,parent);        }    }    private void drawVertical(Canvas c, 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++){            final View child = parent.getChildAt(i);            RecyclerView v = new RecyclerView(parent.getContext());            final  RecyclerView.LayoutParams params = (RecyclerView.LayoutParams)child.getLayoutParams();            final  int top = child.getBottom() + params.bottomMargin;            final int bottom = top + mDivider.getIntrinsicHeight();            mDivider.setBounds(left,top,right,bottom);            mDivider.draw(c);        }    }    private void drawHorizontal(Canvas c, RecyclerView parent) {        final  int top = parent.getPaddingTop();        final  int bottom = parent.getHeight() - parent.getPaddingBottom();        final  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.getRight() + params.rightMargin;            final int right = left + mDivider.getIntrinsicHeight();            mDivider.setBounds(left,top,right,bottom);            mDivider.draw(c);        }    }    @Override    public void getItemOffsets(Rect outRect, int itemPosition, RecyclerView parent) {        if(mOrientation == VERTICAL_LIST){            outRect.set(0,0,0,mDivider.getIntrinsicHeight());        }else {            outRect.set(0,0,mDivider.getIntrinsicWidth(),0);        }    }}

使用:

    rlv.addItemDecoration(new DividerItemDecoration(this,DividerItemDecoration.VERTICAL_LIST));

——————————–2017年7月19日00:46:08——————————–

原创粉丝点击