RecyclerView 隐藏部分分割线
在项目中遇到复杂点的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; //分割线Drawableprivate 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;}//获取分割线尺寸@Overridepublic 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);}
}
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
