使用onDraw()来绘制间隔

分层图中,可以明显的看出来,onDraw() 绘制的面板 在itemView的下面。使用draw()即使绘制了分割线,但是由于ItemView的遮盖,还是显示不出来,所以:自定义分割线,需要使用到Rect 方法,控制item的间隔提供空间来显示绘制的分割线。我们需要获取item之间的间距,计算分割线的四个关键点坐标,绘制矩形。
效果:
具体代码
@Override
public void onDraw(@NonNull Canvas c, @NonNull RecyclerView parent, @NonNull RecyclerView.State state) {
int count = parent.getChildCount(); //recycleView中item显示在界面的个数
for (int i = 0; i < count; i++) {
View childView = parent.getChildAt(i); // 获取position的item
int index = parent.getChildAdapterPosition(childView); // 获取itemView所在的位置
if (index != 0) {
ViewGroup.MarginLayoutParams childLp = (ViewGroup.MarginLayoutParams) ((ViewGroup) childView)
.getChildAt(0).getLayoutParams(); //获取itemView中ImageView的margin值
int devideLeft = childLp.leftMargin; // 设置矩形left
int rectMiddleLine = 30 / 2; // 分割线一半的高度
int topLine = childView.getTop() - rectMiddleLine - devideHeight / 2;
int devideTop = topLine; // 设置分割线的top
int devideRight = parent.getWidth() - childLp.rightMargin; // 设置矩形right
int devideBottom = childView.getTop() - rectMiddleLine + devideHeight / 2; // 设置分割线的bottom
c.drawRect(devideLeft, devideTop, devideRight, devideBottom, paint); // 绘制分割线矩形
}
}
}

@Override
public void getItemOffsets(@NonNull Rect outRect, @NonNull View view, @NonNull RecyclerView parent, @NonNull RecyclerView.State state) {
super.getItemOffsets(outRect, view, parent, state);
if (parent.getChildAdapterPosition(view) != 0) {(http://www.amjmh.com/v/BIBRGZ_558768/)
outRect.top = 30; // item之间的距离
devideHeight = 10; // 自绘制的间距的矩形的高度
}
}
————————————————

posted @ 2019-08-28 22:21  李艳艳665  阅读(266)  评论(0编辑  收藏  举报