RecyclerView自定义下划线

2017-10-23  本文已影响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);

}

}

}

上一篇下一篇

猜你喜欢

热点阅读