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>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);
实现效果如下:
之前在其他地方学习到,还可以通过在itemlayout中实现时间线的效果。
参考:
1、启舰博客。
到此这篇关于Android中使用itemdecoration实现时间线效果的文章就介绍到这了,更多相关itemdecoration实现时间线内容请搜索毛票票以前的文章或继续浏览下面的相关文章希望大家以后多多支持毛票票!
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。