大家好,最近在学习这本书。
书中关于 DividerGridItemDecoration 这个方法没有提及,因为咱们可以根据书中的DrawVertical、DrawHorizontal方法推导。
我这边放上个人的代码。
public class DividerGridItemDecoration extends RecyclerView.ItemDecoration {
private static final int[] ATTRS = new int[]{android.R.attr.listDivider};
private Drawable mDivider;
private String TAG = "DividerGridItemDecoration";
public DividerGridItemDecoration(Context context) {
final TypedArray a = context.obtainStyledAttributes(ATTRS);
mDivider = a.getDrawable(0);
a.recycle();
}
@Override
public void onDraw(@NonNull Canvas c, @NonNull RecyclerView parent) {
drawAll(c,parent);
}
public void drawAll(Canvas c,RecyclerView parent){
final int chileCount = parent.getChildCount();
for (int i = 0; i < chileCount; i++){
final View child = parent.getChildAt(i);
final RecyclerView v = new RecyclerView(parent.getContext());
final RecyclerView.LayoutParams params = (RecyclerView.LayoutParams) child.getLayoutParams();
final int left = child.getLeft();
final int right= child.getRight() + mDivider.getIntrinsicHeight();
final int top = child.getTop();
final int bottom = child.getBottom() + mDivider.getIntrinsicHeight();
Log.v(TAG+i,left+","+top+","+right+","+bottom);
mDivider.setBounds(left,top,right,bottom);
mDivider.draw(c);
}
}
@Override
public void getItemOffsets(@NonNull Rect outRect, @NonNull View view, @NonNull RecyclerView parent, @NonNull RecyclerView.State state) {
outRect.set(0,0,mDivider.getIntrinsicWidth(),mDivider.getIntrinsicHeight());
}
}