代码之家  ›  专栏  ›  技术社区  ›  dimsuz

如何从XML文件加载AnimationDrawable

  •  14
  • dimsuz  · 技术社区  · 15 年前

    我有一些自定义类BitmapStorage,没有附加到任何视图或任何其他视图-实用程序。 我已经生成了\u animation.xml文件,其中包含带有动画帧的动画列表:

    <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 
    

    结果是一样的。它返回空的可提取。

    任何暗示都会受到极大的赞赏,提前谢谢。

    3 回复  |  直到 8 年前
        1
  •  28
  •   tir38    8 年前

    可牵引的

    <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" />
    
        2
  •  6
  •   dimsuz    15 年前

    耶,我找到原因了!:)

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

    • 我没有在属性中使用android:namespace(出于某种原因,我决定不需要它)
    • 我删除了<item>标记中的“duration”属性

    在我修复了这些问题之后,res.getDrawable()开始返回正确的AnimationDrawable实例。

    必须更精确地查看resources.notfoundException,它是getcause()来找出错误的地方:)

        3
  •  3
  •   SpearHend    12 年前

    这可以用于从“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"); 
    }