自定义RecyclerView分割线-新闻详情

自定义RecyclerView分割线


发布时间:2017-06-27责任编辑:朱明 浏览:2813


listView可以通过设置diver属性来定义分割线,但RecyclerView没有这样的属性,官方提供了addItemDecoration方法,我们可以通过继承RecyclerView.ItemDecoration来自定义分割线。
自定义分割线有三个方法:getItemOffsets、onDraw、onDrawOver,下面分别做介绍:
getItemOffsets方法用于设定分割线的属性,比如颜色和宽度。针对每一个itemView在左、上、右、下方向,通过outRect.set方法进行设置。
onDraw则是具体的画出分割线,需要注意的是,onDraw方法针对的是整个RecyclerView,因此需要遍历RecyclerView的每个itemView,通过Canvas的drawRect方法画出分割线。
onDrawOver方法也是画分割线,不同的是onDraw方法的分割线是在itemView的下方进行绘制,而onDrawOver是在itemView的上方进行绘制,一般用于在绘制完itemView后再画一些分割线。
一般的自定义分割线只需要重写getItemOffsets和onDraw就可以了,在实现两个方法后,通过RecyclerView的addItemDecoration方法,便可随意设置分割线的宽度、颜色等属性设置分割线。
部分代码:
/**
 *
设置ItemView的分割线(左上右下) 针对每个ItemView
 * @param
outRect
 
* @param view
 
* @param parent
 
* @param state
 
*/
@Override
public void getItemOffsets(Rect outRect, View view, RecyclerView parent, RecyclerView.State state) {
   
super.getItemOffsets(outRect,view,parent,state);

    outRect.set(
0,0,0,diver);

}

/**
 *
ItemView以下绘制Decoration 针对整个RecyclerView 绘制需遍历所有ItemView(仅可见Item)
 * @param
canvas
 
* @param parent
 
* @param state
 
*/
@Override
public void onDraw(Canvas canvas, RecyclerView parent, RecyclerView.State state) {
   
super.onDraw(canvas,parent,state);

   
int count = parent.getChildCount();

   
// 遍历每个itemView
   
for (int i = 0; i < count; i++) {

       
if(i == count - 1){
           
break;
        }

        View view = parent.getChildAt(i);
        RecyclerView.LayoutParams layoutParams = (RecyclerView.LayoutParams) view.getLayoutParams();

       
// 开始绘制
       
int left = layoutParams.leftMargin;
       
int top = view.getBottom() +layoutParams.bottomMargin;
       
int right = parent.getWidth() - layoutParams.rightMargin;
       
int bottom = top + diver;

        canvas.drawRect(left,top,right,bottom,
paint);
    }
}
 
 

敬业工作室  供稿