Skip to content

Instantly share code, notes, and snippets.

@Mun0n
Created February 21, 2019 12:09
Show Gist options
  • Star 4 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save Mun0n/64d6549eed1ae42f35d1155b5b818789 to your computer and use it in GitHub Desktop.
Save Mun0n/64d6549eed1ae42f35d1155b5b818789 to your computer and use it in GitHub Desktop.
GridSpacingItemDecoration in kotlin for Grid RecyclerViews
import android.graphics.Rect
import android.support.v7.widget.RecyclerView
import android.view.View
class GridSpacingItemDecoration(private val spanCount: Int, private val spacing: Int, private val includeEdge: Boolean) : RecyclerView.ItemDecoration() {
override fun getItemOffsets(outRect: Rect, view: View, parent: RecyclerView, state: RecyclerView.State) {
val position = parent.getChildAdapterPosition(view) // item position
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
}
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment