美文网首页
RecyclerView自定义下划线

RecyclerView自定义下划线

作者: 天天大保建 | 来源:发表于2017-10-23 20:38 被阅读0次

    /**

    * 1.自定义下划线

    * 2.@authorDell

    * 3.@date2017/10/11 19:18

    */

    public class CustomDecoration extends RecyclerView.ItemDecoration{

    public static final int HORIZONTAL_LIST= LinearLayoutManager.HORIZONTAL;

    public static final int VERTICAL_LIST= LinearLayoutManager.VERTICAL;

    private Drawablem Divider;

    private int mOrientation;

    /**

    * 分割线缩进值

    */

    private int inset;

    private Paint paint;

    /**

    *@param context

    *@param orientationlayout的方向

    *@param drawable引入的drawable的ID

    *@param inset分割线缩进值

    */

    public CustomDecoration(FragmentA context,int orientation,int drawable,int inset) {

    mDivider= context.getResources().getDrawable(drawable);

    this.inset= inset;

    paint=newPaint();

    paint.setColor(context.getResources().getColor(R.color.white));

    paint.setStyle(Paint.Style.FILL);

    paint.setAntiAlias(true);

    setOrientation(orientation);

    }

    public void setOrientation(int orientation) {

    if(orientation !=HORIZONTAL_LIST&& orientation !=VERTICAL_LIST) {

    throw newIllegalArgumentException("invalid orientation");

    }

    mOrientation= orientation;

    }

    @Override

    public void onDraw(Canvas c, RecyclerView parent) {

    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();

    //最后一个item不画分割线

    for(inti =0; i < childCount -1; i++) {

    final View child = parent.getChildAt(i);

    final RecyclerView.LayoutParams params = (RecyclerView.LayoutParams) child.getLayoutParams();

    final int top = child.getBottom() + params.bottomMargin;

    final int bottom = top +mDivider.getIntrinsicHeight();

    if(inset>0) {

    c.drawRect(left, top, right, bottom,paint);

    mDivider.setBounds(left +inset, top, right -inset, bottom);

    }else{

    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(inti =0; i < childCount -1; 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);

    }

    }

    //由于Divider也有宽高,每一个Item需要向下或者向右偏移

    @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);

    }

    }

    }

    相关文章

      网友评论

          本文标题:RecyclerView自定义下划线

          本文链接:https://www.haomeiwen.com/subject/qpqzuxtx.html