package com.example.mytvvideo.utils;
import android.content.Context;
import android.view.View;
import android.view.ViewGroup;
import androidx.recyclerview.widget.GridLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
/**
* author : 张健
* time : 2024/5/11
*/
public class CustomGridLayoutManager extends GridLayoutManager {
public CustomGridLayoutManager(Context context, int spanCount) {
super(context, spanCount);
}
@Override
public boolean checkLayoutParams(RecyclerView.LayoutParams lp) {
return lp instanceof CustomLayoutParams;
}
@Override
public RecyclerView.LayoutParams generateDefaultLayoutParams() {
return new CustomLayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT,
ViewGroup.LayoutParams.WRAP_CONTENT);
}
public static class CustomLayoutParams extends RecyclerView.LayoutParams {
public CustomLayoutParams(int width, int height) {
super(width, height);
}
// 在这里添加自定义的参数和逻辑
}
@Override
public void onLayoutChildren(RecyclerView.Recycler recycler, RecyclerView.State state) {
super.onLayoutChildren(recycler, state);
// 在这里编写自定义的布局逻辑
if (getItemCount() == 0) {
return;
}
int startPosition = 0;
// 初始化布局参数
final int spanCount = getSpanCount();
final int childWidth = getWidth() / spanCount;
final int childHeight = getHeight() / spanCount;
for (int i = 0; i < spanCount; i++) {
for (int j = 0; j < spanCount; j++) {
View child = recycler.getViewForPosition(startPosition);
addView(child);
measureChildWithMargins(child, 0, 0);
int widthSpace = getWidth() - getDecoratedMeasuredWidth(child);
int heightSpace = getHeight() - getDecoratedMeasuredHeight(child);
// 布局子View
layoutDecorated(child, j * childWidth, i * childHeight,
(j + 1) * childWidth + (j + 1 == spanCount ? widthSpace / spanCount : 0),
(i + 1) * childHeight + (i + 1 == spanCount ? heightSpace / spanCount : 0));
startPosition++;
}
}
}
}