You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.14 04:52:37