如何在Android中利用itemdecoration实现一个时间线效果
作者
今天就跟大家聊聊有关如何在Android中利用itemdecoration实现一个时间线效果,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。
代码如下:
//时间线装饰器 publicclassTimeLineDecorationextendsRecyclerView.ItemDecoration{ privatePaintmPaint; publicTimeLineDecoration(){ mPaint=newPaint(); mPaint.setStyle(Paint.Style.FILL); mPaint.setColor(Color.BLUE); mPaint.setStrokeWidth(5); } @Override publicvoidonDraw(@NonNullCanvasc,@NonNullRecyclerViewparent,@NonNullRecyclerView.Statestate){ super.onDraw(c,parent,state); RecyclerView.LayoutManagerlayoutManager=parent.getLayoutManager(); //这里的childcount为可见item的个数。与item的个数不一定相同。 intchildCount=parent.getChildCount(); for(inti=0;i<childCount;i++){ Viewchild=parent.getChildAt(i); //避免硬编码,这里通过代码获取在getItemOffsets方法中设置的宽度 intleftDecoWidth=layoutManager.getLeftDecorationWidth(child); //根据position获取当前的数据,然后根据数据状态绘制不同的形状 intposition=parent.getChildAdapterPosition(child); intcx=leftDecoWidth/2; intcy=child.getTop()+child.getHeight()/2; intradius=20; if(position==2){ c.drawRect(cx-radius,cy-radius,cx+radius,cy+radius,mPaint); }elseif(position==4){ //绘制外圈为空心圆,内圈为实心圆 mPaint.setStyle(Paint.Style.STROKE); c.drawCircle(cx,cy,radius,mPaint); mPaint.setStyle(Paint.Style.FILL); c.drawCircle(cx,cy,radius>>1,mPaint); }else{ c.drawCircle(cx,cy,radius,mPaint); } //绘制item中间的连接线,第一个item与最后一个item的连接线需单独处理一下。 if(position==0){ c.drawLine(cx,cy+mPaint.getStrokeWidth()+radius,cx,child.getBottom(),mPaint); }elseif(position==parent.getAdapter().getItemCount()-1){ c.drawLine(cx,child.getTop(),cx,cy-mPaint.getStrokeWidth()-radius,mPaint); }else{ c.drawLine(cx,cy+mPaint.getStrokeWidth()+radius,cx,child.getBottom(),mPaint); c.drawLine(cx,child.getTop(),cx,cy-mPaint.getStrokeWidth()-radius,mPaint); } } } @Override publicvoidonDrawOver(@NonNullCanvasc,@NonNullRecyclerViewparent,@NonNullRecyclerView.Statestate){ super.onDrawOver(c,parent,state); //不受outRect设置的范围影响,可以绘制在item上。 } @Override publicvoidgetItemOffsets(@NonNullRectoutRect,@NonNullViewview,@NonNullRecyclerViewparent,@NonNullRecyclerView.Statestate){ super.getItemOffsets(outRect,view,parent,state); //在item左边留下100像素的空间。item的布局会在减掉这100像素后处理。 outRect.left=100; } }
然后将该itemdecoration设置到recyclerview上。
RecyclerAdapteradapter=newRecyclerAdapter(this,data); mRecyclerView.setLayoutManager(newLinearLayoutManager(this)); mRecyclerView.addItemDecoration(newTimeLineDecoration()); mRecyclerView.setAdapter(adapter);
看完上述内容,你们对如何在Android中利用itemdecoration实现一个时间线效果有进一步的了解吗?如果还想了解更多知识或者相关内容,请关注恰卡编程网行业资讯频道,感谢大家的支持。
目录
推荐阅读
0 条评论
本站已关闭游客评论,请登录或者注册后再评论吧~