原文链接:https://segmentfault.com/a/1190000006858824
LinearLayoutManager spacing
import android.graphics.Rect;
import android.support.v7.widget.RecyclerView;
import android.view.View;
/**
* Created by anonymous on 2016/9/9 0009.
* <p>
* SpacesItemDecoration
* <p>
* mRecyclerView.addItemDecoration(new SpacesItemDecoration(5));
*/
public class SpacesItemDecoration extends RecyclerView.ItemDecoration {
private int space;
public SpacesItemDecoration(
int space) {
this.space = space;
}
@Override
public void getItemOffsets(Rect outRect, View view, RecyclerView parent, RecyclerView.State state) {
outRect.left = space;
outRect.right = space;
outRect.bottom = space;
if (parent.getChildLayoutPosition(view) ==
0) {
outRect.top = space;
}
else {
outRect.top =
0;
}
}
}
使用方法很简单,上面注释中也已经给出:
mRecyclerView.addItemDecoration(
new SpacesItemDecoration(
5));
GridLayoutManager or StaggeredGridLayoutManager spacing
import android.graphics.Rect;
import android.support.v7.widget.RecyclerView;
import android.view.View;
/**
* Created by anonymous on 2016/9/9 0009.
* <p>
* GridSpacingItemDecoration
* <p>
* int spanCount = 3; // 3 columns
* int spacing = 50; // 50px
* boolean includeEdge = false;
* recyclerView.addItemDecoration(new GridSpacingItemDecoration(spanCount, spacing, includeEdge));
*/
public class GridSpacingItemDecoration extends RecyclerView.ItemDecoration {
private int spanCount;
private int spacing;
private boolean includeEdge;
public GridSpacingItemDecoration(
int spanCount,
int spacing,
boolean includeEdge) {
this.spanCount = spanCount;
this.spacing = spacing;
this.includeEdge = includeEdge;
}
@Override
public void getItemOffsets(Rect outRect, View view, RecyclerView parent, RecyclerView.State state) {
int position = parent.getChildAdapterPosition(view);
int column = position % spanCount;
if (includeEdge) {
outRect.left = spacing - column * spacing / spanCount;
outRect.right = (column +
1) * spacing / spanCount;
if (position < spanCount) {
outRect.top = spacing;
}
outRect.bottom = spacing;
}
else {
outRect.left = column * spacing / spanCount;
outRect.right = spacing - (column +
1) * spacing / spanCount;
if (position >= spanCount) {
outRect.top = spacing;
}
}
}
}
此处不仅对间距进行了处理,而且对spanCount也进行了处理,使用方法:
int spanCount =
3;
int spacing =
50;
boolean includeEdge =
false;
mRecyclerView.addItemDecoration(
new GridSpacingItemDecoration(spanCount, spacing, includeEdge));
转载请注明原文地址: https://ju.6miu.com/read-963791.html