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

如何通过代码自定义Animated Vector Drawable的动画时长

Example of the animated vector

问题

我有一个仅使用XML Object Animator的Animated Vector Drawable,启动应用后它会正常播放动画。请问如何通过代码控制部分目标或组件的动画时长?


解决方案

要单独控制Animated Vector Drawable(AVD)中部分组件的动画时长,核心是通过代码定位到对应ObjectAnimator实例,再动态修改其时长属性,具体步骤如下:

1. 给XML中的动画设置唯一ID

首先确保你的AVD及其关联的ObjectAnimator XML里,给需要控制的动画设置android:id,这样才能在代码中精准定位:

比如你的AVD文件(res/drawable/avd_demo.xml):

<animated-vector xmlns:android="http://schemas.android.com/apk/res/android"
    android:drawable="@drawable/base_vector">

    <!-- 第一个需要控制的目标组件 -->
    <target
        android:name="icon_path"
        android:animation="@anim/anim_icon_path"/>

    <!-- 第二个目标组件 -->
    <target
        android:name="bg_circle"
        android:animation="@anim/anim_bg_scale"/>
</animated-vector>

对应的动画文件(res/anim/anim_icon_path.xml):

<objectAnimator
    android:id="@+id/anim_icon_path" <!-- 必须设置ID -->
    android:duration="1000"
    android:propertyName="pathData"
    android:valueFrom="M10,10 L20,20"
    android:valueTo="M10,20 L20,10"
    android:valueType="pathType"/>

2. 在代码中修改指定动画的时长

假设你把AVD设置在ImageView中,可通过以下方式修改:

Kotlin 实现

val avd = imageView.drawable as AnimatedVectorDrawable

// 通过ID找到对应的Animator
val pathAnimator = avd.findAnimatorById(R.id.anim_icon_path)
// 修改时长为2500毫秒
pathAnimator?.duration = 2500

// 如果需要修改另一个动画
val scaleAnimator = avd.findAnimatorById(R.id.anim_bg_scale)
scaleAnimator?.duration = 1500

// 启动/重启动画
avd.start()

Java 实现

AnimatedVectorDrawable avd = (AnimatedVectorDrawable) imageView.getDrawable();

Animator pathAnimator = avd.findAnimatorById(R.id.anim_icon_path);
if (pathAnimator != null) {
    pathAnimator.setDuration(2500);
}

Animator scaleAnimator = avd.findAnimatorById(R.id.anim_bg_scale);
if (scaleAnimator != null) {
    scaleAnimator.setDuration(1500);
}

avd.start();

3. 注意要点

  • 必须给ObjectAnimator设置android:id,否则无法通过findAnimatorById获取实例。
  • 如果AVD已经处于播放状态,修改时长后需要调用start()重新启动才能生效;若未播放,修改后直接启动即可。
  • 每个ObjectAnimator可以独立设置不同时长,互不影响。

内容的提问来源于stack exchange,提问作者Дмитрий

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.23 12:45:35