实现方法

Recyclerview+ItemDecoration

重写ItemDecoration
class TimeLineItemDecoration(var context: Context) : RecyclerView.ItemDecoration() {//上下左右的偏移量var topOffset : Int = dp2px(context , 30)var bottomOffset : Int = 0var leftOffset : Int = dp2px(context , 60)var rightOffset : Int = 0//轴点半径var circleRadius : Float = dp2px(context , 8).toFloat()//轴点画笔var paintCircle : Paint? = null//轴线画笔var paintLine : Paint? = nullinit {paintCircle = Paint(Paint.ANTI_ALIAS_FLAG)paintCircle?.color = Color.REDpaintLine = Paint(Paint.ANTI_ALIAS_FLAG)paintLine?.color = Color.GRAYpaintLine?.strokeCap = Paint.Cap.ROUNDpaintLine?.strokeWidth = dp2px(context , 5).toFloat()}override fun getItemOffsets(outRect: Rect, view: View, parent: RecyclerView, state: RecyclerView.State) {super.getItemOffsets(outRect, view, parent, state)outRect.set(leftOffset , topOffset , rightOffset , bottomOffset)}override fun onDraw(c: Canvas, parent: RecyclerView, state: RecyclerView.State) {super.onDraw(c, parent, state)var childCount = parent.childCountfor (i in 0 until childCount){var child = parent.getChildAt(i)//绘制轴点//确定圆心var circleX : Float = (child.left - leftOffset/3).toFloat()var circleY : Float = (child.top).toFloat()//绘制轴点c.drawCircle(circleX , circleY , circleRadius , paintCircle)//绘制上半轴线//上端点var topTopPointX : Float = circleXvar topTopPointY : Float = circleY - circleRadius/2 - topOffset//下端点var topBottomPointX : Float = circleXvar topBottomPointY : Float = circleY - circleRadius*2c.drawLine(topTopPointX , topTopPointY , topBottomPointX , topBottomPointY , paintLine)//绘制下半轴线var bottomTopPointX : Float = circleXvar bottomTopPointY : Float = circleY + circleRadius*2var bottomBottomPointX : Float = circleXvar bottomBottomPointY : Float = child.bottom.toFloat()c.drawLine(bottomTopPointX , bottomTopPointY , bottomBottomPointX , bottomBottomPointY , paintLine)}}private fun dp2px(context: Context , dpValue : Int) : Int{val displayMetrics = context.resources.displayMetricsreturn ((displayMetrics.density*dpValue + 0.5f).toInt())}}
给Recyclerview设置ItemDecoration
class MainActivity : AppCompatActivity() {var dataList = ArrayList<TimeLineBean>()override fun onCreate(savedInstanceState: Bundle?) {super.onCreate(savedInstanceState)setContentView(R.layout.activity_main)initData()initView()}private fun initData(){for (i in 1..20){var timeLineBean = TimeLineBean()timeLineBean.desc = "这是第 $i 个状态"dataList.add(timeLineBean)}}private fun initView(){var linearLayoutManager = LinearLayoutManager(this)linearLayoutManager.orientation = LinearLayoutManager.VERTICALrecyclerTimeLine.layoutManager = linearLayoutManagerrecyclerTimeLine.addItemDecoration(TimeLineItemDecoration(this))var timeLineAdapter = TimeLineAdapter(this , dataList)recyclerTimeLine.adapter = timeLineAdapter}
}

完整项目地址点这里

AndroidTimeLine(时间轴)绘制相关推荐

  1. 告别中规中矩!好看的PPT时间轴都这么画

    我们平常看见的时间轴,基本都是下面这几种: 横平竖直,非常单调. 那么问题来了,有没有办法让这些时间轴变得高大上起来? 答案当然是肯定的. 但是需要我们开点脑洞. 只要我们的脑洞足够大,时间轴在PPT ...

  2. 教科书级「时间轴」画法,看完我服了!

    上次给大家分享PPT时间轴绘制技巧后,我们在后台众多"涨知识了"的夸夸声中,发现了一条(不太和谐)颇有见地的提问,"如果时间节点特别多,比如历史时间轴这种,该怎么画更方便 ...

  3. GraphPad Prism绘制时间轴图

    今天教大家如何绘制"时间轴图",并展示网格线的使用方法和坐标后缀的编辑. 通常,在GraphPad中的Column中,新建一组数据后,会自动生成散点图,然后对其进行相应的编辑,即可 ...

  4. QChart绘制占比图,但是以时间轴为X轴

    需求:需要绘制比例图,而且是随着时间不停地增加,比例直方图会越来越多,x轴的字符串也越来越多,但随着变多,x轴会被省略掉,所以我需要能够动态增删X轴的直方图,既不丢失数据又不增多X轴的字符串: 问题: ...

  5. vue+canvas绘制时间轴

    vue+canvas绘制时间轴 最近在研究canvas绘制时间轴,直接上代码,希望分享能给大家带来帮助,效果如下: 代码如下,可以拷贝到vue项目中直接预览 <template><d ...

  6. 【定制项目】【M14 监测预警平台】百度地图区域绘制(时间轴)/柱状图/仪表图 - 关键技术 python flask + echarts

    一.项目需求 项目名称:[某监测预警平台]. 项目需求:气候数据:雨量,温湿度,PM,雷达回波,雷电预报等展示到可视化大屏. 项目工期:10个工作日. 二.项目架构 运行环境支持Windows,Lin ...

  7. C#:winform使用chart控件绘制折线图,时间轴可缩放

    最近做的一个项目里用到这部分 打算记录下来 挖个坑 已填 Chart坐标轴横轴为时间,纵轴是数值 如果只是一次性绘图,那么遍历一遍数据即可 如果想连续绘制(比如按照时间更新绘制),就需要一个Timer ...

  8. vue3使用vis绘制甘特图制作timeline可拖动时间轴,时间轴中文化

    本文写作顺序:效果展示--子组件封装--父组件传值 仅js的原始图(回归初始化).撤销(上一步)功能实现,样式需要自己调整 目录 前言:参考文档文章 一.实现效果: 二.安装插件及依赖: 三.封装组件 ...

  9. vue+canvas绘制时间轴组件

    说明: 此组件使用vue2语法以及canvas实现. 效果图: 线上地址: time-select-line 安装: npm i time-select-line --save 导入: import ...

最新文章

  1. 解决bootstrap-table多次请求只触发一次的问题
  2. 整了个程序员专用的红包封面,喜欢的来领咯!
  3. Cannot assign a device for operation
  4. mysql怎么写Connection_MySQL里面的CONNECTION_ID
  5. wdcp后台重启服务器后mysql打不开
  6. 喜欢的一些话(不断更新)
  7. Python编写的桌面图形界面程序实现更新检测和下载安装
  8. Node连接MySQL并封装其增删查改
  9. 使用HDTunePro检测硬盘快速上手教程
  10. 【干货分享】花坊类字体设计思路
  11. ipython安装 windows_IPython安装过程 @win7 64bit
  12. python分析掷骰子游戏
  13. win10计算机删除了怎么恢复,win10文件误删除怎么恢复-互盾数据恢复软件
  14. 高阶技术管理岗空降落地实践指南
  15. win10底部任务栏不见了怎么办
  16. 拼图式拖动滑块的验证——使用selenium+python实现
  17. R语言使用倾向评分提高RCT(随机对照试验)的效率
  18. [转载]软件常见的各种版本英文缩写
  19. Python学习之列表--自动超市购物车
  20. PAT 1089 狼人杀-简单版 C++实现 解题思路

热门文章

  1. VUE-获取本地局域网IP地址
  2. 新版微信小程序开发实战
  3. Delphi Bpl包编译Dcp,Bin,Dcu路径设置
  4. 数据治理与元数据管理
  5. Android跟随手指运动的小球 适合新手的很好的Demo
  6. 施密特正交化及QR分解(附实现代码)
  7. 部署jar至k8s服务器
  8. 生信 蛋白质结构与功能确定【思维导图】(学习总结)
  9. 正在申请中银VISA奥运信用卡中......
  10. ASP.NET关于引用bootstrap.css导致Gridview Header无法居中