我有一些自定义类BitmapStorage,没有附加到任何View或其他任何东西 - 一个实用程序。 我有born_animation.xml文件,其中包含< animation-list>动画帧:
<animation-list oneshot="true" >
<item drawable="@drawable/frame01" />
<item drawable="@drawable/frame02" />
</animation-list>
我想使用Resources类从xml文件加载动画作为AnimationDrawable(所以它会为我做所有的解析),提取位图并将它们放到我的自定义存储类中。
我遇到的问题:
Resources res = context.getResources();
AnimationDrawable drawable = (AnimationDrawable)res.getDrawable(R.drawable.born_animation);
assertTrue( drawable != null ); <= fails! it's null
WTF?有人可以解释一下吗?代码编译好。所有资源都已到位。
我尝试了另一种方法 - 使用ImageView进行解析(如开发指南中所述)
ImageView view = new ImageView(context);
view.setBackgroundResource(R.drawable.born_animation);
AnimationDrawable drawable = (AnimationDrawable)view.getBackground();
assertTrue( drawable != null ); <= fails! it's null
结果是一样的。它返回null drawable。
在此之前,非常感谢任何展示。
答案 0 :(得分:28)
绘制对象
<animation-list xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/myprogress"
android:oneshot="false">
<item android:drawable="@drawable/progress1" android:duration="150" />
<item android:drawable="@drawable/progress2" android:duration="150" />
<item android:drawable="@drawable/progress3" android:duration="150" />
</animation-list>
代码:
ImageView progress = (ImageView)findViewById(R.id.progress_bar);
if (progress != null) {
progress.setVisibility(View.VISIBLE);
AnimationDrawable frameAnimation = (AnimationDrawable)progress.getDrawable();
frameAnimation.setCallback(progress);
frameAnimation.setVisible(true, true);
}
查看
<ImageView
android:id="@+id/progress_bar"
android:layout_alignParentRight="true"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/myprogress" />
答案 1 :(得分:6)
是的,我找到了原因! :)
这是我的坏事:我没有正确格式的animation.xml文件:
我修复了这些东西后,res.getDrawable()开始返回一个正确的AnimationDrawable实例。
不得不更精确地查看Resources.NotFoundException并使用getCause()来查明错误:)
答案 2 :(得分:3)
这可用于从“xml”目录加载资源。
Drawable myDrawable;
Resources res = getResources();
try {
myDrawable = Drawable.createFromXml(res, res.getXml(R.xml.my_drawable));
} catch (Exception ex) {
Log.e("Error", "Exception loading drawable");
}