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