在android中,您可以使用R ..
等语法访问资源我想要做的是达到一组具有命名约定的图像。
例如,我有4个文件在drawable中,名称为:
draw_1_.jpg
如何将可绘制图像列表添加到List ..
这是因为,我想制作幻灯片。
THX
答案 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.jpg
,draw_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 ..然后你可以尽可能地使用它们!