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

如何在运行时获取Android动画资源文件中的duration属性值?

Android运行时获取动画资源中scale标签的duration值

你的动画资源是<set>包裹的<scale>,duration属性定义在子元素<scale>里,而你之前的写法都是直接从AnimationSet(getResources().getAnimation()返回的对象)中获取属性,自然拿不到子动画的配置,所以返回默认值或null。

下面是两种可行的解决方案:

方案一:直接解析XML资源文件

通过XmlResourceParser直接读取动画XML的标签属性,不需要先转换成Animation对象:

XmlResourceParser parser = getResources().getXml(R.anim.zoom);
int defaultDuration = 50;
int targetDuration = defaultDuration;

try {
    int eventType = parser.getEventType();
    while (eventType != XmlPullParser.END_DOCUMENT) {
        // 找到scale标签时读取duration属性
        if (eventType == XmlPullParser.START_TAG && "scale".equals(parser.getName())) {
            targetDuration = parser.getAttributeIntValue(
                "http://schemas.android.com/apk/res/android", 
                "duration", 
                defaultDuration
            );
            break; // 找到目标标签后直接退出循环
        }
        eventType = parser.next();
    }
} catch (XmlPullParserException | IOException e) {
    e.printStackTrace();
} finally {
    parser.close();
}

// targetDuration即为xml中定义的80

方案二:从解析后的Animation对象中提取

如果已经将XML解析成Animation对象,可以通过AnimationSet获取子动画,再读取其duration:

Animation anim = getResources().getAnimation(R.anim.zoom);
int defaultDuration = 50;
int targetDuration = defaultDuration;

if (anim instanceof AnimationSet) {
    AnimationSet animSet = (AnimationSet) anim;
    // 获取动画集合中的第一个子动画(你的场景中只有scale)
    List<Animation> childAnims = animSet.getAnimations();
    if (!childAnims.isEmpty()) {
        Animation scaleAnim = childAnims.get(0);
        targetDuration = scaleAnim.getDuration();
    }
}

// targetDuration即为xml中定义的80

内容的提问来源于stack exchange,提问作者slowcoder

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.21 01:30:03