https://www.jishudog.com/9055/html
https://blog.csdn.net/ww897532167/article/details/86187058
https://www.cnblogs.com/apkbus/p/5506301.html (***)
一、ItemDecoration的接口方法
- getItemOffsets(Rect outRect, View view, RecyclerView parent, RecyclerView.State state)
outRect.set(50, 50, 50, 50):会转化成item左上右下的padding值
- onDraw(Canvas c, RecyclerView parent, RecyclerView.State state)
将装饰绘制到RecyclerView提供的画布上
Google自带的DividerItemDecoration类源码分析
以竖向列表为例:
private void drawVertical(Canvas canvas, RecyclerView parent) {
canvas.save();
final int left;
final int right;
//noinspection AndroidLintNewApi - NewApi lint fails to handle overrides.
//clipToPadding用来定义ViewGroup是否允许在padding中绘制。
if (parent.getClipToPadding()) {
left = parent.getPaddingLeft();
right = parent.getWidth() - parent.getPaddingRight();
canvas.clipRect(left, parent.getPaddingTop(), right,
parent.getHeight() - parent.getPaddingBottom());
} else {
left = 0;
right = parent.getWidth();
}
final int childCount = parent.getChildCount();
for (int i = 0; i < childCount; i++) {
final View child = parent.getChildAt(i);
parent.getDecoratedBoundsWithMargins(child, mBounds);
final int bottom = mBounds.bottom + Math.round(child.getTranslationY());
final int top = bottom - mDivider.getIntrinsicHeight();
mDivider.setBounds(left, top, right, bottom);
mDivider.draw(canvas);
}
canvas.restore();
}
系统的DividerItemDecoration源码比一般的博客源码写的更加详细,考虑到了clipToPadding这个特殊的属性。
以某个position的layoutparams为基准,去绘制装饰View。
0 条评论