package com.example.widget;
import android.content.Context;
import android.content.res.TypedArray;
import android.graphics.Canvas;
import android.graphics.Rect;
import android.graphics.drawable.Drawable;
import android.support.v7.widget.RecyclerView;
import android.util.AttributeSet;
import android.view.View;
public class GridDividerItemDecoration extends RecyclerView.ItemDecoration
{
private Drawable mDivider;
private int mSpacing;
public GridDividerItemDecoration(Context context, AttributeSet attrs, int spacingPixelSize)
{
final TypedArray a = context.obtainStyledAttributes(attrs, new int[]{android.R.attr.listDivider});
mDivider = a.getDrawable(0);
a.recycle();
mSpacing = spacingPixelSize;
}
@Override
public void getItemOffsets(Rect outRect, View view, RecyclerView recyclerView, RecyclerView.State state)
{
outRect.set(mSpacing, mSpacing, mSpacing, mSpacing);
}
@Override
public void onDrawOver(Canvas canvas, RecyclerView recyclerView, RecyclerView.State state)
{
drawHorizontal(canvas, recyclerView);
drawVertical(canvas, recyclerView);
}
private void drawHorizontal(Canvas canvas, RecyclerView recyclerView)
{
if(recyclerView.getChildCount() == 0) return;
final int left = recyclerView.getPaddingLeft();
final int right = recyclerView.getWidth() - recyclerView.getPaddingRight();
final View child = recyclerView.getChildAt(0);
if(child.getHeight() == 0) return;
final RecyclerView.LayoutParams params = (RecyclerView.LayoutParams) child.getLayoutParams();
int top = child.getBottom() + params.bottomMargin + mSpacing;
int bottom = top + mDivider.getIntrinsicHeight();
final int parentBottom = recyclerView.getHeight() - recyclerView.getPaddingBottom();
while(bottom < parentBottom)
{
mDivider.setBounds(left, top, right, bottom);
mDivider.draw(canvas);
top += mSpacing + params.topMargin + child.getHeight() + params.bottomMargin + mSpacing;
bottom = top + mDivider.getIntrinsicHeight();
}
}
private void drawVertical(Canvas canvas, RecyclerView recyclerView)
{
final int top = recyclerView.getPaddingTop();
final int bottom = recyclerView.getHeight() - recyclerView.getPaddingBottom();
final int childCount = recyclerView.getChildCount();
for(int i = 0; i < childCount; i++)
{
final View child = recyclerView.getChildAt(i);
final RecyclerView.LayoutParams params = (RecyclerView.LayoutParams) child.getLayoutParams();
final int left = child.getRight() + params.rightMargin + mSpacing;
final int right = left + mDivider.getIntrinsicWidth();
mDivider.setBounds(left, top, right, bottom);
mDivider.draw(canvas);
}
}
}