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;i2、为RecyclerView添加写好的ItemDecoration即可
mRecyclerView.addItemDecoration(newDividerItemDecoration(this));
3、没有3。
其实从RecyclerView.ItemDecoration的名字就看得出来,它是RecyclerView的item的装饰品,也就是说,除了画分割线,想画什么都是可以的。
以上这篇Android给RecyclerView添加分割线的具体步骤(分享)就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持毛票票。