ItemDecoration只需理解3個方法

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裏填充上層的內容

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章