如何在运行时获取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
相关产品推荐
相关产品推荐

