aaaa
aaaimport android.graphics.Rect; import android.support.v7.widget.RecyclerView; import android.view.View; /** * Created by Android Studio * User: Ailurus(ailurus@foxmail.com) * Date: 2015-10-28 * Time: 15:20 */ public class GridSpacingItemDecoration extends RecyclerView.ItemDecoration { private int spanCount; private int spacing; private boolean includeEdge; private int headerNum; public GridSpacingItemDecoration(int spanCount, int spacing, boolean includeEdge, int headerNum) { this.spanCount = spanCount; this.spacing = spacing; this.includeEdge = includeEdge; this.headerNum = headerNum; } @Override public void getItemOffsets(Rect outRect, View view, RecyclerView parent, RecyclerView.State state) { int position = parent.getChildAdapterPosition(view) - headerNum; // item position if (position >= 0) { 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 } } } else { outRect.left = 0; outRect.right = 0; outRect.top = 0; outRect.bottom = 0; } } } }
If you want to use it, just do as the following.
int spacingInPixels = getResources().getDimensionPixelSize(R.dimen.grid_layout_margin); recyclerView.addItemDecoration(new GridSpacingItemDecoration(2, spacingInPixels, true, 0));
wogenhaosini commented on 6 Dec 2016
Thank you very much。
WMTAndroidJaymin commented on 2 Jan
Thanks...
ravigajadin commented on 6 Jan
thanks
eltray commented on 25 Jan
Perfect! Thanks man.
Fomovet commented on 21 Jun
Thank you very much! You are my brother
burakkarabonial commented on 16 Aug
Great, thanks!
tatocaster commented on 11 Sep
just a converted into Kotlin
class GridSpacingItemDecoration(private val spanCount: Int, private val spacing: Int, private val includeEdge: Boolean, private val headerNum: Int) : RecyclerView.ItemDecoration() { override fun getItemOffsets(outRect: Rect, view: View, parent: RecyclerView, state: RecyclerView.State?) { val position = parent.getChildAdapterPosition(view) - headerNum // item position if (position >= 0) { val 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 } } } else { outRect.left = 0 outRect.right = 0 outRect.top = 0 outRect.bottom = 0 } } }