Android开发Android技术知识Android开发经验谈

ItemDecoration只需理解3个方法

2019-08-28  本文已影响62人  waiwaaa

ItemDecoration的作用是给RecyclerView里面的条目增加一些装饰,最常用的就是添加分割线了,我们没有特殊要求的话,只需要给RecyclerView指定默认的分割线,像这样:
mRecyclerView.addItemDecoration(new DividerItemDecoration(this,DividerItemDecoration.VERTICAL));

但设计师可不会这样想,比如颜色、宽度、边距等都会有需求。
要自定义ItemDecoration,只需要复写以下3个方法

public void onDraw(Canvas c, RecyclerView parent, State state)
public void onDrawOver(Canvas c, RecyclerView parent, State state)
public void getItemOffsets(Rect outRect, View view, RecyclerView parent, State state)

onDraw():可以实现类似绘制背景的效果,此方法里绘制的内容会在原内容的下层显示
onDrawOver(),可以绘制在内容的上面,此方法绘制的内容会在原内容的上层显示
getItemOffsets(),可以实现类似margin的效果,outRect.set(left, top, right, bottom)设置四个方法的边距。

1.如果要实现简单的分割线,只需重写getItemOffsets,设置outRect.bottom=dividerHeight;就可以了,效果为显示背景色的分割线

2.如果要给分割线加自己的颜色,则重写onDrawOver,用自己定义的画笔在c里面画出分隔线

@Override
    public void onDraw(Canvas c, RecyclerView parent, RecyclerView.State state) {
        int childCount = parent.getChildCount();
        int left = parent.getPaddingLeft();
        int right = parent.getWidth() - parent.getPaddingRight();

        for (int i = 0; i < childCount - 1; i++) {
            View view = parent.getChildAt(i);
            float top = view.getBottom();
            float bottom = view.getBottom() + dividerHeight;
            c.drawRect(left, top, right, bottom, dividerPaint);
        }
    }

3.如果是实现标签,则要用到onDrawOver,在c里填充上层的内容

上一篇下一篇

猜你喜欢

热点阅读