Android 给RecyclerView添加分割线的具体步骤(分享)
【吐槽】RecyclerView没有提供分割线的方法,想要加个线还要自己画,点击事件的监听都要自己实现,不过真的好用。
给RecyclerView添加分割线的步骤
1、新建类继承于RecyclerView.ItemDecoration,此为是抽象类:
publicstaticabstractclassItemDecoration{
publicvoidonDraw(Canvasc,RecyclerViewparent,Statestate){
onDraw(c,parent);
}
publicvoidonDrawOver(Canvasc,RecyclerViewparent,Statestate){
onDrawOver(c,parent);
}
publicvoidgetItemOffsets(RectoutRect,Viewview,RecyclerViewparent,Statestate){
getItemOffsets(outRect,((LayoutParams)view.getLayoutParams()).getViewLayoutPosition(),
parent);
}
}
“onDraw和onDrawOver,显然,这两个方法是用于绘制的,那么绘制分割线的逻辑可以放在这里面,它们二者的具体区别是:onDraw是在itemview绘制之前调用,而onDrawOver是在itemview绘制之后调用,因此我们一般选择重写其中一个方法即可。getItemOffsets,这个方法是告诉RecyclerView在绘制完一个itemview的时候,应该留下多少空位,以便于绘制分割线。”
好像逻辑也不难,但是真的好麻烦,比如我要给我的瀑布流布局加一条系统自带的分割线,系统自带的就行,那我要新建一个实现类:
publicclassDividerItemDecorationextendsRecyclerView.ItemDecoration{
//使用系统自带的listDivider
privatestaticfinalint[]ATTRS=newint[]{
android.R.attr.listDivider
};
privateDrawablemDivider;
publicDividerItemDecoration(Contextcontext){
super();
//从TypedArray中得到一个Drawable对象
finalTypedArraytypedArray=context.obtainStyledAttributes(ATTRS);
mDivider=typedArray.getDrawable(0);
typedArray.recycle();
}
@Override
publicvoidonDraw(Canvasc,RecyclerViewparent,RecyclerView.Statestate){
super.onDraw(c,parent,state);
drawDivider(c,parent);
}
/**
*遍历childView,为每一个childView描绘divider
*@paramc画布对象
*@paramparent父控件即RecyclerView
*/
privatevoiddrawDivider(Canvasc,RecyclerViewparent){
//获取分割线的上边距,即RecyclerView的padding值
finalinttop=parent.getPaddingTop();
//分割线下边距
finalintbottom=parent.getHeight()-parent.getPaddingBottom();
finalintchildCount=parent.getChildCount();
//遍历所有itemview,为它们的右边方绘制分割线,就是计算出上下左右四个值画一个矩形
for(inti=0;i
2、为RecyclerView添加写好的ItemDecoration即可
mRecyclerView.addItemDecoration(newDividerItemDecoration(this));
3、没有3。
其实从RecyclerView.ItemDecoration的名字就看得出来,它是RecyclerView的item的装饰品,也就是说,除了画分割线,想画什么都是可以的。
以上这篇Android给RecyclerView添加分割线的具体步骤(分享)就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持毛票票。