15

我有一些自定义类 BitmapStorage,没有附加到任何视图或其他任何东西 - 一个实用程序。我有 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 

怎么回事?有人可以解释一下吗?代码编译得很好。所有资源都已到位。

我尝试了另一种方法 - 使用 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 可绘制对象。

任何提示将不胜感激,在此先感谢。

4

3 回答 3

29

可绘制

<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" />
于 2010-01-25T22:56:29.820 回答
7

是的,我找到了原因!:)

这是我的错:我的 animation.xml 文件格式不正确:

  • 我没有在属性中使用 android: 命名空间(出于某种原因,我认为它不是必需的)
  • 我删除了 <item> 标签中的“duration”属性

在我修复这些东西之后 res.getDrawable() 开始返回一个正确的 AnimationDrawable 实例。

必须更精确地查看 Resources.NotFoundException ,它是 getCause() 来找出问题所在:)

于 2010-01-26T13:56:59.393 回答
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"); 
}
于 2012-04-19T14:14:31.830 回答