package com.android.app_base.widget;
|
|
import android.graphics.Rect;
|
import android.view.View;
|
|
import androidx.annotation.NonNull;
|
import androidx.recyclerview.widget.RecyclerView;
|
|
/**
|
* RecyclerView 网格item等分间距
|
*/
|
public class GridSpaceItemDecoration extends RecyclerView.ItemDecoration {
|
private int mSpanCount;//横条目数量
|
private int mRowSpacing;//行间距
|
private int mColumnSpacing;// 列间距
|
|
/**
|
* @param spanCount 列数
|
* @param rowSpacing 行间距
|
* @param columnSpacing 列间距
|
*/
|
public GridSpaceItemDecoration(int spanCount, int rowSpacing, int columnSpacing) {
|
this.mSpanCount = spanCount;
|
this.mRowSpacing = rowSpacing;
|
this.mColumnSpacing = columnSpacing;
|
}
|
|
@Override
|
public void getItemOffsets(@NonNull Rect outRect, @NonNull View view, @NonNull RecyclerView parent, @NonNull RecyclerView.State state) {
|
int position = parent.getChildAdapterPosition(view); // 获取view 在adapter中的位置。
|
int column = position % mSpanCount; // view 所在的列
|
|
//列间等间距(列数从0开始)
|
//列左边 = 所在列 * 列间距 / 总列数
|
//列右边 = 列间距 - 下一列的列左边
|
outRect.left = column * mColumnSpacing / mSpanCount;
|
outRect.right = mColumnSpacing - (column + 1) * mColumnSpacing / mSpanCount;
|
|
|
if (mRowSpacing == -1) {
|
return;
|
}
|
// 如果position > 行数,说明不是在第一行,则不指定行高,其他行的上间距为 top=mRowSpacing
|
if (position >= mSpanCount) {
|
outRect.top = mRowSpacing; // item top
|
}
|
}
|
}
|