Android Recycler StaggeredGrid разделитель
Моя проблема в том, что я пытался поместить несколько черных линий между элементами staggeredGrid, но я не могу заставить его работать должным образом. Я нашел этот класс, который добавляет пробелы между каждым отдельным элементом:
public class SpacesItemDecoration extends RecyclerView.ItemDecoration {
private final int mSpace;
public SpacesItemDecoration(int space) {
this.mSpace = space;
}
@Override
public void getItemOffsets(Rect outRect, View view, RecyclerView parent, RecyclerView.State state) {
outRect.left = mSpace;
outRect.right = mSpace;
outRect.bottom = mSpace;
// Add top margin only for the first item to avoid double space between items
if (parent.getChildAdapterPosition(view) == 0)
outRect.top = mSpace;
}
}
Как я могу приспособить это, чтобы покрасить те места?
1 ответ
Решение
Вам просто нужно переопределить onDraw()
на самом деле нарисовать что-то на вид. Будьте осторожны, если добавить несколько украшений, порядок важен.
Ниже приведен пример кода, рисующего границу внизу представления, вам нужно будет нарисовать все 4 границы.
public class DividerDecoration extends RecyclerView.ItemDecoration {
private final Paint mPaint;
private int mHeightDp;
public DividerDecoration(Context context, int color, float heightDp) {
mPaint = new Paint();
mPaint.setStyle(Paint.Style.FILL);
mPaint.setColor(color);
mHeightDp = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, heightDp, context.getResources().getDisplayMetrics());
}
@Override
public void onDraw(Canvas c, RecyclerView parent, RecyclerView.State state) {
for (int i = 0; i < parent.getChildCount(); i++) {
View view = parent.getChildAt(i);
c.drawRect(view.getLeft(), view.getBottom(), view.getRight(), view.getBottom() + mHeightDp, mPaint);
}
}
}
Также вы можете проверить полный пример здесь на рисунке нижнего разделителя.