如何从动画列表中获取所有drawables res ID?

时间:2015-02-19 07:33:02

标签: android android-drawable

如果我有一个可以使用R.drawable.anim引用的动画可绘制xml文件(动画列表),有没有办法可以获取数组中所有Drawable的ID?

基本上我不想以某种方式加载xml文件并获取该动画中涉及的所有Drawable的列表。

这是我正在使用的动画xml

<animation-list xmlns:android="http://schemas.android.com/apk/res/android"
    android:oneshot="false" >

    <item
        android:drawable="@drawable/typer_step_1"
        android:duration="50"/>
    <item
        android:drawable="@drawable/typer_step_2"
        android:duration="50"/>
    <item
        android:drawable="@drawable/typer_step_3"
        android:duration="50"/>
    <item
        android:drawable="@drawable/typer_step_4"
        android:duration="50"/>

</animation-list>

2 个答案:

答案 0 :(得分:2)

<string-array name="random_imgs">
    <item>@drawable/image1</item>
    <item>@drawable/image2</item>
    <item>@drawable/image3</item>
</string-array>

您活动中

   TypedArray imgs = getResources().obtainTypedArray(R.array.random_imgs);
   //get resourceid by index
   imgs.getResourceId(i, -1);
   // or set you ImageView's resource to the id
   mImgView1.setImageResource(imgs.getResourceId(i, -1));
   imgs.recycle();

答案 1 :(得分:0)

你可以使用反射。

导入Field类

import java.lang.reflect.Field;

Field[] Fields = R.drawable.class.getFields();
int[] resArray = new int[Fields.length];
for(int i = 0; i < Fields.length; i++) {
    try {
        resArray[i] = Fields[i].getInt(null);
    } catch (IllegalArgumentException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
}

或者您可以在res文件夹中的arrays.xml文件中使用类型化的数组,如下所示:

<?xml version="1.0" encoding="utf-8"?>
<resources>

    <string-array name="random_imgs">
        <item>@drawable/car_01</item>
        <item>@drawable/balloon_random_02</item>
        <item>@drawable/dog_03</item>
    </string-array>

</resources>

然后在您的活动中访问它们:

TypedArray imgs = getResources().obtainTypedArray(R.array.random_imgs);
//get resourceid by index
imgs.getResourceId(i, -1)
// or set you ImageView's resource to the id
mImgView1.setImageResource(imgs.getResourceId(i, -1));