使用String作为值名称和输入来查找File

时间:2015-01-15 13:29:18

标签: java android canvas

要在画布上绘图,我需要从以下资源中获取图像文件:

bmpNode = BitmapFactory.decodeResource(getResources(), R.drawable.node);

之后,我可以调用我的画布绘制:

c.drawBitmap(bmpNode, xPos, yPos, null);

问题是我有大量唯一的Node对象,ID为String值。我将它们从“1”编号为“100”。每个节点在资源中都有自己的图像文件,也称为“1” - “100”。 我知道的方式,我不得不做一百行代码来获取每个图像:

1 = BitmapFactory.decodeResource(getResources(), R.drawable.1);
2 = BitmapFactory.decodeResource(getResources(), R.drawable.2);
[...]
100 = BitmapFactory.decodeResource(getResources(), R.drawable.100);

现在不是为每个Image放置100行代码而是想制作一个循环,它将起到类似下面代码的作用:

for (int i=0; i<arrayNodes.length; i++){        //for every Node in the Array
    "i" = BitmapFactory.decodeResource(getResources(), R.drawable."i");
}

我试图研究反射和地图,但我对这类问题不熟悉并无法应用我找到的任何内容。另外我不知道如何正确搜索这个问题,因为我不知道调用方法“R.drawable”的输入值是什么。

1 个答案:

答案 0 :(得分:1)

获取这样的ID。

ArrayList<Bitmap> bitmapArrayList = new ArrayList<Bitmap>();
for (int i=0; i<arrayNodes.length; i++){
  bitmapArrayList.add(i, BitmapFactory.decodeResource(getResources(), getResources().getIdentifier(String.valueOf(i), "drawable", package_name)));
}

检索位图:

bitmapArrayList.get(i);

如果不存在此类资源,getIdentifier()将返回 0