package com.example.zyl.learnsql.recycleview;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.Rect;
import android.support.annotation.NonNull;
import android.support.v7.widget.RecyclerView;
import android.view.View;
/**
* @author zyl
* <p>
* <p>
* 1.注意的是,getItemOffsets是针对每个Item都会走一次,也就是说每个Item的outRect都可以不同,
* 但是onDraw和onDrawOver所整个ItemDecoration只执行一次的,并不是针对Item的,
* 所以我们需要在onDraw和onDrawOver中绘图时,一次性将所有Item的ItemDecoration绘制完成。
* 从上面也可以看出,这里在onDraw函数中绘图时,通过for循环对每一个item画上一个绿色圆。
* @date 2019/5/24
*/
public class LinearItemDecoration extends RecyclerView.ItemDecoration {
private Paint mPaint;
public LinearItemDecoration() {
mPaint = new Paint();
mPaint.setColor(Color.BLUE);
}
/**
* getItemOffsets的主要作用就是给item的四周加上边距,实现的效果类似于margin,将item的四周撑开一些距离,
* 在撑开这些距离后,我们就可以利用上面的onDraw函数,在这个距离上进行绘图了。
*
* @param outRect
* @param view
* @param parent
* @param state
*/
@Override
public void getItemOffsets(@NonNull Rect outRect, @NonNull View view, @NonNull RecyclerView parent, @NonNull RecyclerView.State state) {
super.getItemOffsets(outRect, view, parent, state);
outRect.bottom = 1;
double random = Math.random();
if (random > 0) {
outRect.left = (int) (200 * random);
} else {
outRect.left = 200;
}
}
/**
* Canvas c: 是指通过getItemOffsets撑开的空白区域所对应的画布,通过这个canvas对象,可以在getItemOffsets所撑出来的区域任意绘图
*
* @param c
* @param parent
* @param state
*/
@Override
public void onDraw(@NonNull Canvas c, @NonNull RecyclerView parent, @NonNull RecyclerView.State state) {
super.onDraw(c, parent, state);
int childCount = parent.getChildCount();
RecyclerView.LayoutManager layoutManager = parent.getLayoutManager();
for (int i = 0; i < childCount; i++) {
View child = parent.getChildAt(i);
//动态获取每个item的左边的宽度
int left = layoutManager.getLeftDecorationWidth(child);
float cx = left / 2;
float cy = child.getTop() + child.getHeight() / 2;
c.drawCircle(cx, cy, 20, mPaint);
}
}
@Override
public void onDrawOver(@NonNull Canvas c, @NonNull RecyclerView parent, @NonNull RecyclerView.State state) {
super.onDrawOver(c, parent, state);
}
}
网友评论