mpao
6/10/2018 - 12:53 PM

single/grid/staggedgrid with variable columns

single/grid/staggedgrid with variable columns

public class StaggedGridItemDecoration extends RecyclerView.ItemDecoration {

    private int padding;
    private int gridSize;

    public StaggedGridItemDecoration(Context context, int dimenMarginResource, int gridSize) {

        padding = context.getResources().getDimensionPixelSize(dimenMarginResource);
        this.gridSize = gridSize;

    }

    @Override
    public void getItemOffsets(Rect outRect, View view, RecyclerView parent, RecyclerView.State state) {

        StaggeredGridLayoutManager.LayoutParams lp = (StaggeredGridLayoutManager.LayoutParams)view .getLayoutParams();
        int column = lp.getSpanIndex();

        if( gridSize == 1){
            // colonna singola
            outRect.top    = 0;
            outRect.bottom = padding;
            outRect.left   = 0;
            outRect.right  = 0;
            return;
        }

        if( column == 0 ){
            // prima colonna
            outRect.top    = 0;
            outRect.bottom = padding;
            outRect.left   = 0;
            outRect.right  = padding/2;
        }else if( column != gridSize-1){
            // colonne in mezzo
            outRect.top    = 0;
            outRect.bottom = padding;
            outRect.left   = padding/2;
            outRect.right  = padding/2;
        }else{
            // ultima colonna
            outRect.top    = 0;
            outRect.bottom = padding;
            outRect.left   = padding/2;
            outRect.right  = 0;
        }

    }

}