我正在尝试创建一个需要加载一堆图像的应用程序,然后通过单击一个简单按钮来一个接一个地显示。 但是,无需手动将图像文件的每个ResourceID输入数组:
int imageIDs = {
R.drawable.img1,
R.drawable.img2,
R.drawable.img3,
R.drawable.img4,
R.drawable.img5,
R.drawable.img6,
R.drawable.img7,
R.drawable.img8,
R.drawable.img9,
..
}
我只想创建一个for循环来完成这项工作。我认为这应该可行:
int numberOfImages = 19;
ArrayList<Integer> imageIDs = new ArrayList<Integer>();
for (int i = 0; i <= numberOfImages; i++) {
imageIDs.add(<<resourceIDs*>>);
}
// * Don't know how to state it. R.drawable.img + i does not work.
但这似乎不起作用。我已经尝试了很多不同的方法,这些方法现在已经在网上找到了好几个小时,但是找不到任何有效的方法。甚至可以用R.drawable创建一个array或arrayList。通过循环查找标识符,还是我必须手动输入所有标识符?
有什么方法可以在Android Studio中的应用程序中包含数百个图像,而不必手动输入所有图像?
答案 0 :(得分:0)
在使用数百张图片(即游戏和其他应用)的情况下,您可能会因此避免使用ID。完成您要尝试执行的操作的另一种方法是,制作一个扩展了SurfaceView和Runnable的Runner类,在其中您重写run()方法并创建一些其他类,如resume(),pause(),onTouch()。
此类将是运行您的应用程序的主线程,而不是像现在那样使用id,而是使用Canvas在屏幕上绘制位图。为此的游戏示例如下:https://github.com/TheNamesDyl/blastar/blob/master/app/src/main/java/me/dylanburton/blastarreborn/MainActivity.java
答案 1 :(得分:0)
如果您事先知道图像总数并正确命名,则可以尝试:
List<Integer> images = new ArrayList<>();
for( int i = 0, total = 100; i < total; i++ ){
images.add( getResources().getIdentifier("img" + i, "drawable", getPackageName() ) );
}
这基本上是反向查找,因此效率不高,但是如果我们要讨论数千张图像,它可能会派上用场。
答案 2 :(得分:0)
在Android Java中,您尝试评估字符串(在JavaX中使用ScriptEngine),例如:
String sImage = "R.drawable.img" + 1;
int image = Integer.parseInt(sImage);
然后例如将此“资源”加载到ImageView
中。
imageView.setImageResource(image);
这是不可能的,原因是每个资源都有一个与int相关的值,并且该值在每个版本中都会改变。
您可以在生成的R.java
中看到该值
因此,获取资源引用的唯一方法是创建int值数组:
int imageIDs = {
R.drawable.img1,
R.drawable.img2,
R.drawable.img3,
R.drawable.img4,
R.drawable.img5,
R.drawable.img6,
R.drawable.img7,
R.drawable.img8,
R.drawable.img9,
}