content: package my.project.moviesbox.custom;
  
  import android.graphics.Rect;
  import android.view.View;
  
  import androidx.recyclerview.widget.RecyclerView;
  
  /**
    * @包名: my.project.moviesbox.custom
    * @类名: GridSpaceItemDecoration
    * @描述: RecyclerView item 间距均分
    * @来源: https://stackoverflow.com/questions/28531996/android-recyclerview-gridlayoutmanager-column-spacing
    * @作者: Li Z
    * @日期: 2024/1/22 20:04
    * @版本: 1.0
   */
  public class GridSpaceItemDecoration extends RecyclerView.ItemDecoration {
      private int spanCount;
      private int spacing;
      private boolean includeEdge;
  
      public GridSpaceItemDecoration(int spanCount, int spacing, boolean includeEdge) {
          this.spanCount = spanCount;
          this.spacing = spacing;
          this.includeEdge = includeEdge;
      }
  
      @Override
      public void getItemOffsets(Rect outRect, View view, RecyclerView parent, RecyclerView.State state) {
          int position = parent.getChildAdapterPosition(view); // item position
          int column = position % spanCount; // item column
  
          if (includeEdge) {
              outRect.left = spacing - column * spacing / spanCount; // spacing - column * ((1f / spanCount) * spacing)
              outRect.right = (column + 1) * spacing / spanCount; // (column + 1) * ((1f / spanCount) * spacing)
  
              if (position < spanCount) { // top edge
                  outRect.top = spacing;
              }
              outRect.bottom = spacing; // item bottom
          } else {
              outRect.left = column * spacing / spanCount; // column * ((1f / spanCount) * spacing)
              outRect.right = spacing - (column + 1) * spacing / spanCount; // spacing - (column + 1) * ((1f /    spanCount) * spacing)
              if (position >= spanCount) {
                  outRect.top = spacing; // item top
              }
          }
      }
  }
  