Android自定义进度动画实现方案咨询
Android 自定义圆弧进度加载界面实现思路
基于Drawable的核心实现方案
1. 自定义Drawable类
- 直接继承
android.graphics.drawable.Drawable,重写onDraw(Canvas canvas)作为绘制入口 - 定义核心变量:
long duration:动画总时长,支持外部传入设置float progress:当前绘制进度(0~1,控制圆弧扫过的范围)Paint arcPaint:配置粉色圆弧的画笔(设置STROKE样式、线宽、颜色)RectF arcRect:圆弧的绘制区域,用于确定圆弧的位置和大小
2. 用ValueAnimator驱动进度动画
- 创建
ValueAnimator.ofFloat(0f, 1f),设置动画时长为duration - 给动画添加更新监听器,在
onAnimationUpdate回调中更新progress,并调用invalidateSelf()触发重绘 - 可选设置
LinearInterpolator实现匀速绘制,保证线条平滑推进
3. 圆弧绘制逻辑
- 在
onDraw中,根据当前progress计算圆弧扫过的角度:progress * 180f(因为从左侧起点到右侧终点是半圆弧,总角度180度) - 起始角度固定为180度(对应左侧位置),调用
canvas.drawArc(arcRect, 180f, progress * 180f, false, arcPaint)完成绘制 - 重写
onBoundsChange(Rect bounds)方法,在布局边界变化时重新计算arcRect,确保圆弧自适应View大小(要留出画笔线宽的边距,避免绘制被裁剪)
4. 外部控制方法
- 添加
setDuration(long duration)方法,允许外部动态设置动画时长 - 添加
start()、reset()方法,分别用于启动动画和重置进度到初始状态 - 如需在XML中使用,可给自定义Drawable添加
@IntRes类型的属性,支持在布局中配置时长
5. 细节优化
- 动画开始前重置
progress为0,保证每次启动都是从左侧开始绘制 - 处理动画的生命周期:在Drawable被销毁时取消动画,避免内存泄漏
- 可添加进度回调,方便外部监听加载完成状态
内容的提问来源于stack exchange,提问作者nithin_sikinam
相关产品推荐
相关产品推荐

