在项目中遇到复杂点的RecyclerView,可能会有隐藏部分分割线的需求,例如item1和item3之间的分割线隐藏,item4和item5之间的分割线隐藏等。
在看了文档里的ItemDecoration类后,可以发现这样三个方法:
getItemOffsets、onDraw和onDrawOver。
onDraw可以通过一些列c.draw的方法在itemView绘制之前绘制我们需要的内容。
onDrawOver与onDraw
类似,只不过是在绘制itemView之后绘制,具体表现形式,就是绘制的内容在itemview上层。
这两个方法在这里不做讨论,重点关注getItemOffsets
方法。
getItemOffsets
可以通过outRect.set(l,t,r,b)
设置指定itemview的paddingLeft
,paddingTop
,paddingRight
,paddingBottom。
在这里使用一个自定义的分割线去继承
ItemDecoration
,然后在需要隐藏的地方设置outRect.set(0,0,0,0),进而来实现隐藏分割线的效果。
以下代码隐藏了第一条与最后一条分割线。
public class SimpleDividerItemDecoration extends RecyclerView.ItemDecoration {
private Drawable mDivider; //分割线Drawable
private int mDividerHeight; //分割线高度
/**
* 使用line_divider中定义好的颜色
*
* @param context
* @param dividerHeight 分割线高度
*/
public SimpleDividerItemDecoration(Context context, int dividerHeight) {
mDivider = ContextCompat.getDrawable(context, R.drawable.ba_divider);
mDividerHeight = dividerHeight;
}
/**
* @param context
* @param divider 分割线Drawable
* @param dividerHeight 分割线高度
*/
public SimpleDividerItemDecoration(Context context, Drawable divider, int dividerHeight) {
if (divider == null) {
mDivider = ContextCompat.getDrawable(context, R.drawable.ba_divider);
} else {
mDivider = divider;
}
mDividerHeight = dividerHeight;
}
//获取分割线尺寸
@Override
public void getItemOffsets(Rect outRect, View view, RecyclerView parent, RecyclerView.State state) {
super.getItemOffsets(outRect, view, parent, state);
int childAdapterPosition = parent.getChildAdapterPosition(view);
int lastCount = parent.getAdapter().getItemCount() - 1;
if (childAdapterPosition == 0) {
outRect.set(0, 0, 0, 0);
return;
}
if (childAdapterPosition == lastCount) {
outRect.set(0, 0, 0, 0);
return;
}
outRect.set(0, 0, 0, mDividerHeight);
}
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)