如何在原生Android中设计环形步骤进度指示器
Android 环形步骤进度指示器实现方案
不用找第三方库,自己写个自定义View成本极低,逻辑拆成三层绘制就能完全复现效果:
- 底层打底环:初始化一个描边模式的
Paint,把StrokeCap设为ROUND实现圆角线端,描边宽度匹配设计稿的环粗,直接用Canvas.drawArc()绘制360度整弧,颜色用未激活的浅灰色就行。 - 进度高亮环:和底层环保持同圆心、同半径、同描边宽度,颜色换成主题高亮色,起始角度固定在-90度(12点钟方向为起点),扫过角度按
已完成步骤数/总步骤数 * 360计算,同样用drawArc()绘制对应弧段就行。 - 步骤节点与文本:先把整环按总步骤数做360度等分,算出每个节点对应的圆周坐标,按节点状态分别绘制:
- 已完成节点:绘制主题色填充的实心圆,圆内可加白色对勾标识
- 当前节点:绘制尺寸稍大的主题色实心圆,可额外加一圈半透明外描边做突出效果
- 未开始节点:绘制浅灰色描边的空心圆
- 节点旁的步骤序号、提示文字,根据节点所在位置做适当偏移避免压到环身,调用
Canvas.drawText()绘制即可。
开发注意点:
- 所有画笔都要开
setAntiAlias(true)抗锯齿,避免圆弧、圆形边缘发虚- 计算圆周坐标时记得把角度转成弧度再代入三角函数公式:
x = 圆心横坐标 + 环半径 * cos(Math.toRadians(对应角度))、y = 圆心纵坐标 + 环半径 * sin(Math.toRadians(对应角度))- 要做步骤切换动画的话直接用
ValueAnimator,在0到目标进度角度之间做数值插值,每帧回调触发invalidate()重绘就能得到平滑的过渡效果,不用引入额外动画库- 记得重写
onMeasure()处理wrap_content的测量逻辑,避免布局里设置wrap_content时控件强行占满父布局。

内容的提问来源于stack exchange,提问作者Aaron Ebinezer
相关产品推荐
相关产品推荐

