package com.chad.baserecyclerviewadapterhelper.decoration; import android.content.Context; import android.graphics.Canvas; import android.graphics.Rect; import android.graphics.drawable.Drawable; import android.support.v7.widget.LinearLayoutManager; import android.support.v7.widget.RecyclerView; import android.view.View; /** * https://github.com/CymChad/BaseRecyclerViewAdapterHelper */ public class GridItemDecoration extends RecyclerView.ItemDecoration { private Drawable dividerDrawable; private int orientation = LinearLayoutManager.VERTICAL; public GridItemDecoration(Drawable divider) { dividerDrawable = divider; } public GridItemDecoration(Context context, int resId) { dividerDrawable = context.getResources().getDrawable(resId); } public GridItemDecoration(Context context, int resId, int orientation) { dividerDrawable = context.getResources().getDrawable(resId); this.orientation = orientation; } @Override public void getItemOffsets(Rect outRect, View view, RecyclerView parent, RecyclerView.State state) { if (dividerDrawable == null) { return; } if (parent.getChildLayoutPosition(view) < 1) { return; } if (orientation == LinearLayoutManager.VERTICAL) { outRect.top = dividerDrawable.getIntrinsicHeight(); } else if (orientation == LinearLayoutManager.HORIZONTAL) { outRect.left = dividerDrawable.getIntrinsicWidth(); } } /** * @param c * @param parent * @param state */ @Override public void onDrawOver(Canvas c, RecyclerView parent, RecyclerView.State state) { if (dividerDrawable == null) { return; } int childCount = parent.getChildCount(); int rightV = parent.getWidth(); for (int i = 0; i < childCount; i++) { View child = parent.getChildAt(i); RecyclerView.LayoutParams params = (RecyclerView.LayoutParams) child.getLayoutParams(); int leftV = parent.getPaddingLeft() + child.getPaddingLeft(); int bottomV = child.getTop() - params.topMargin; int topV = bottomV - dividerDrawable.getIntrinsicHeight(); int topH = child.getTop() + params.topMargin; int bottomH = child.getBottom() + params.bottomMargin; int rightH = child.getLeft() - params.leftMargin; int leftH = rightH - dividerDrawable.getIntrinsicWidth(); dividerDrawable.setBounds(leftH, topH, rightH, bottomH); dividerDrawable.draw(c); dividerDrawable.setBounds(leftV, topV, rightV, bottomV); dividerDrawable.draw(c); } } }