Android - 获取可绘制资源的列表

时间:2011-07-14 08:16:09

标签: android

在android中,您可以使用R ..

等语法访问资源

我想要做的是达到一组具有命名约定的图像。

例如,我有4个文件在drawable中,名称为:

draw_1_.jpg

如何将可绘制图像列表添加到List ..

这是因为,我想制作幻灯片。

THX

4 个答案:

答案 0 :(得分:5)

我不相信您可以信任资源编译器为您的图像提供连续的整数值。在过去,我总是创建一个静态数组来存储它们。

private static int[] imgs = { R.id.draw_1, R.id.draw_2, R.id.draw_3, R.id.draw_4 };

有了这个,你就可以得到一段代码,如:

int curSlide = 0;
view.setBackgroundResource(imgs[curSlide]);

答案 1 :(得分:2)

好吧,如果您知道图像的后缀,您可以通过getResources().getIdentifier(...)请求可绘制的标识符,然后使用标识符获取drawable。因此,如果你知道你有多少张图像,那么你可以创建一个循环并将每个drawable存储在一个列表中。只要考虑到这样的查找相对昂贵。

答案 2 :(得分:1)

虽然这是一个老问题,但我最近遇到了类似的问题。我喜欢jeffd的解决方案,但在代码中存储图像ID列表并不是最好的主意。所以,我创建了一个带有列表的xml文件,我把它放在res / xml目录中。

<?xml version="1.0" encoding="utf-8"?>
<list>
    <image id="@drawable/draw_1"/>
    <image id="@drawable/draw_2"/>
    <image id="@drawable/draw_3"/>
    <image id="@drawable/draw_4"/>
</list>

图片存储在drawable目录中,名为draw_1.jpgdraw_2.jpg等。

使用这种xml有一个优点,即在编译时检查资源的可用性,所以如果你有一个拼写错误,它就不会编译。

在代码中检索列表只是解析xml,但它有点冗长。 XmlPullParser方法getAttributeResourceValue允许获取资源ID而不处理任何字符串。

List<Integer> list = new ArrayList<>();
try {
    while (parser.next() != XmlPullParser.END_DOCUMENT) {
        if (parser.getEventType() == XmlPullParser.START_TAG &&
            parser.getName().equals("image")) {

            int imageId = -1;
            for (int i = 0; i < parser.getAttributeCount(); ++i) {
                if (parser.getAttributeName(i).equals("id")) {
                    list.add(parser.getAttributeResourceValue(i, -1));
                }
            }
        }
    }
}
catch (XmlPullParserException | IOException e) {
    e.printStackTrace();
}

另一个更简单的解决方案是使用数组作为资源。我还没试过这个,但你可以在这里看到一个例子:http://www.geeks.gallery/how-to-list-images-from-array-xml-in-android/这是如何构建你的xml:

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <array name="list">
        <item>@drawable/draw_1</item>
        <item>@drawable/draw_2</item>
        <item>@drawable/draw_3</item>
    </array>
</resources>

要访问该阵列,您可以使用以下代码:

TypedArray list = getResources().obtainTypedArray(R.array.list);
for (int i = 0; i < list.length(); ++i) {
    int id = list.getResourceId(i, -1);
}

答案 3 :(得分:0)

你应该将所有图像识别为Drawable ..然后你可以尽可能地使用它们!