【发布时间】:2011-07-14 08:16:09
【问题描述】:
在 android 中,您可以使用 R.. 等语法访问资源
我想要做的是达到一组图像具有命名约定。
例如,我有 4 个名称为可绘制的文件:
draw_1_.jpg
我怎样才能得到可绘制图像列表到 List ..
这是因为,我想制作幻灯片。
谢谢
【问题讨论】:
标签: android
在 android 中,您可以使用 R.. 等语法访问资源
我想要做的是达到一组图像具有命名约定。
例如,我有 4 个名称为可绘制的文件:
draw_1_.jpg
我怎样才能得到可绘制图像列表到 List ..
这是因为,我想制作幻灯片。
谢谢
【问题讨论】:
标签: android
我不相信您可以相信资源编译器会为您的图像提供顺序整数值。过去我总是创建一个静态数组来存储这些。
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]);
【讨论】:
虽然这是一个老问题,但我最近也遇到了类似的问题。我喜欢 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);
}
【讨论】:
好吧,如果您知道图像的后缀,您可以通过getResources().getIdentifier(...) 请求可绘制对象的标识符,然后使用标识符获取可绘制对象。所以如果你知道你有多少张图片,那么你可以创建一个循环并将每个可绘制对象存储在一个列表中。只需考虑到这样的查找相对昂贵。
【讨论】:
你应该将所有的 Image 识别为 Drawable .. 然后你就可以使用它们了!
【讨论】: