Created
October 9, 2016 08:06
-
-
Save xingstarx/f2525ef32b04a5e67fecc5c0b5c4b939 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
public class GridSpacingItemDecoration extends RecyclerView.ItemDecoration { | |
private int spanCount; | |
private int spacing; | |
private boolean includeEdge; | |
private int headerNum; | |
private boolean isRtl = TextUtilsCompat.getLayoutDirectionFromLocale(Locale.getDefault()) == ViewCompat.LAYOUT_DIRECTION_RTL; | |
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(isRtl) { | |
column = spanCount - 1 - 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; | |
} | |
} | |
} |
GridSpacingItemDecoration for RecyclerView Decoration
Thank you Bro!!
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
copy from http://stackoverflow.com/a/30701422/5279354 and support rtl feature