RecyclerView 隐藏部分分割线

来源:互联网 发布:淘宝客服兼职 招聘吗 编辑:程序博客网 时间:2024/05/17 08:24

在项目中遇到复杂点的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的paddingLeftpaddingToppaddingRightpaddingBottom。

在这里使用一个自定义的分割线去继承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);    }}

原创粉丝点击