package com.youjing.yingyudiandu.dectation.utils;
import android.content.Context;
import android.graphics.Rect;
import android.view.View;
import androidx.annotation.NonNull;
import androidx.recyclerview.widget.RecyclerView;
public class InnerItemDecoration extends RecyclerView.ItemDecoration {
private int spaceHorizontal; // 单位是px不是dp
private int spaceVertical;
// 构造方法,我在使用时往里面传了两个50,也就是水平和竖直的间隔都为50dp的意思
public InnerItemDecoration(int spaceHorizontal, int spaceVertical, Context context) {
this.spaceHorizontal = dipToPx(spaceHorizontal, context);
this.spaceVertical = dipToPx(spaceVertical, context);
}
@Override
public void getItemOffsets(@NonNull Rect outRect, @NonNull View view, @NonNull RecyclerView parent, @NonNull RecyclerView.State state) {
// 这是错误代码,不能得到理想的运行结果
int position = parent.getChildAdapterPosition(view);
int totalCount = parent.getAdapter().getItemCount();
// outRect.top = spaceVertical / 2;
// outRect.bottom = spaceVertical / 2;
// outRect.left = spaceHorizontal / 2;
// outRect.right = spaceHorizontal / 2;
// 最上面的一排(columns个item)
if (position < 2)
outRect.top = 0;
// 最左边一排
if (position % 2 == 0)
outRect.left = 0;
// 最右边一排
if (position % 2 == 1)
outRect.left = 0;
// 最下面一排
int tem = (int) (Math.ceil((double) totalCount / 2) * 2);
if (position >= tem - 2)
outRect.bottom = 0;
}
private int dipToPx(int dp, Context context) {
float scale = context.getResources().getDisplayMetrics().density;
return (int) (dp * scale + 0.5f);
}
}
添加方法:
RecyclerView.addItemDecoration(new InnerItemDecoration(50,50,mContext));