RecyclerView添加分割线
线性布局
public class CommonDecoration extends RecyclerView.ItemDecoration {
//列表的方向:LinearLayoutManager.VERTICAL或LinearLayoutManager.HORIZONTAL
private int mOrientation;
private int padding;
/**
* 默认分割线:高度为2px,颜色为灰色
*
* @param context
* @param orientation 列表方向
*/
public CommonDecoration(Context context, int orientation, int dp) {
if (orientation != LinearLayoutManager.VERTICAL && orientation != LinearLayoutManager.HORIZONTAL) {
throw new IllegalArgumentException("请输入正确的参数!");
}
mOrientation = orientation;
padding = DensityUtils.dp2px(dp);
}
@Override
public void getItemOffsets(@NonNull Rect outRect, @NonNull View view, @NonNull RecyclerView parent, @NonNull RecyclerView.State state) {
super.getItemOffsets(outRect, view, parent, state);
int itemCount = parent.getAdapter().getItemCount();
int childAdapterPosition = parent.getChildAdapterPosition(view);
if (mOrientation == LinearLayoutManager.HORIZONTAL) {
if (childAdapterPosition < itemCount - 1) {
outRect.set(0, 0, padding, 0);
} else {
outRect.set(0, 0, 0, 0);
}
} else {
if (childAdapterPosition < itemCount - 1) {
outRect.set(0, 0, 0, padding);
} else {
outRect.set(0, 0, 0, 0);
}
}
}
}
网格布局
public class GridDecoration extends RecyclerView.ItemDecoration {
private int horizontalPadding;
public int verticalPadding;
public GridDecoration(int horizontalPadding, int verticalPadding) {
this.horizontalPadding = DensityUtils.dp2px(horizontalPadding);
this.verticalPadding = DensityUtils.dp2px(verticalPadding);
}
@Override
public void getItemOffsets(@NonNull Rect outRect, @NonNull View view, @NonNull RecyclerView parent, @NonNull RecyclerView.State state) {
super.getItemOffsets(outRect, view, parent, state);
RecyclerView.LayoutManager layoutManager = parent.getLayoutManager();
if (layoutManager instanceof GridLayoutManager) {
GridLayoutManager gridLayoutManager = (GridLayoutManager) layoutManager;
int spanCount = gridLayoutManager.getSpanCount();
int childAdapterPosition = parent.getChildAdapterPosition(view);
int column = childAdapterPosition % spanCount;
int itemCount = parent.getAdapter().getItemCount();
outRect.left = column * horizontalPadding / spanCount;
outRect.right = horizontalPadding - (column + 1) * horizontalPadding / spanCount;
//数学思想
int raw = (itemCount-1) / spanCount;
int currentRaw = childAdapterPosition / spanCount;
if (raw != currentRaw) {
outRect.bottom = verticalPadding;
}else{
outRect.bottom = 0;
}
}
}
}