package com.example.widget;
import android.graphics.Rect;
import android.support.v7.widget.GridLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.view.View;
public class GridSpacingItemDecoration extends RecyclerView.ItemDecoration
{
private int mSpacing;
public GridSpacingItemDecoration(int spacingPixelSize)
{
mSpacing = spacingPixelSize;
}
@Override
public void getItemOffsets(Rect outRect, View view, RecyclerView recyclerView, RecyclerView.State state)
{
super.getItemOffsets(outRect, view, recyclerView, state);
int position = recyclerView.getChildLayoutPosition(view);
int spanCount = getSpanCount(recyclerView);
int itemCount = recyclerView.getAdapter().getItemCount();
// top offset
if(position < spanCount)
{
outRect.top = mSpacing;
}
else
{
outRect.top = mSpacing / 2;
}
// bottom offset
if(itemCount % spanCount == 0 && position >= itemCount - spanCount)
{
outRect.bottom = mSpacing;
}
else if(itemCount % spanCount != 0 && position >= itemCount - itemCount % spanCount)
{
outRect.bottom = mSpacing;
}
else
{
outRect.bottom = mSpacing / 2;
}
// left offset
if(position % spanCount == 0)
{
outRect.left = mSpacing;
}
else
{
outRect.left = mSpacing / 2;
}
// right offset
if(position % spanCount == spanCount - 1)
{
outRect.right = mSpacing;
}
else
{
outRect.right = mSpacing / 2;
}
}
private int getSpanCount(RecyclerView recyclerView)
{
if(recyclerView.getLayoutManager() instanceof GridLayoutManager)
{
GridLayoutManager gridLayoutManager = (GridLayoutManager) recyclerView.getLayoutManager();
return gridLayoutManager.getSpanCount();
}
else
{
throw new IllegalStateException(this.getClass().getSimpleName() + " can only be used with a " + GridLayoutManager.class.getSimpleName());
}
}
}