先看效果图
下面是实现方法 分为两步:
一、自定义GridDecoration继承RecyclerView.ItemDecoration
import android.graphics.Rect;
import android.view.View;
import androidx.annotation.IntRange;
import androidx.annotation.NonNull;
import androidx.recyclerview.widget.RecyclerView;
import com.blankj.utilcode.util.ConvertUtils;
public class GridDecoration extends RecyclerView.ItemDecoration {
private final int padding;
private final int space;
private final int spanCount;
public GridDecoration(int paddingDp, int spaceDp, @IntRange(from = 2) int spanCount) {
this.padding = ConvertUtils.dp2px(paddingDp);
this.space = ConvertUtils.dp2px(spaceDp);
this.spanCount = spanCount;
}
@Override
public void getItemOffsets(@NonNull Rect outRect, @NonNull View view, @NonNull RecyclerView parent,
@NonNull RecyclerView.State state) {
super.getItemOffsets(outRect, view, parent, state);
int pos = parent.getChildAdapterPosition(view);
RecyclerView.Adapter<?> adapter = parent.getAdapter();
int itemCount = adapter == null ? 0 : adapter.getItemCount();
boolean isLeft = pos % spanCount == 0;
boolean isRight = (pos + 1) % spanCount == 0;
boolean isTop = pos < spanCount;
boolean isBottom = pos > (itemCount - spanCount - 1);
outRect.left = isLeft ? padding : space / 2;
outRect.right = isRight ? padding : space / 2;
outRect.top = isTop ? padding : space / 2;
outRect.bottom = isBottom ? padding : space / 2;
}
}
二、使用:
recyclerview.setLayoutManager(new GridLayoutManager(this, 2));
recyclerview.setHasFixedSize(true);
GridDecoration deco = new GridDecoration(15, 10, 2);
recyclerview.addItemDecoration(deco);
mAdapter = new JDFreeShippingAdapter();
recyclerview.setAdapter(mAdapter);