在for循环中检索可绘制对象的资源ID

时间:2018-07-16 23:05:22

标签: android android-studio

我正在尝试创建一个需要加载一堆图像的应用程序,然后通过单击一个简单按钮来一个接一个地显示。 但是,无需手动将图像文件的每个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中的应用程序中包含数百个图像,而不必手动输入所有图像?

3 个答案:

答案 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相关的值,并且该值在每个版本中都会改变。

enter image description here

您可以在生成的R.java中看到该值

enter image description here

因此,获取资源引用的唯一方法是创建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,
            }