我想取一个byte
并将其附加到资源ID,以便能够获得与游戏中该编号牌组相对应的图像。使用其他设备上的路径很容易,但是使用资源ID我不确定如何才能执行此操作。
这就是我现在所拥有的:
switch(GameSettings.gameDeck)
{
case 1:
deckImage.setBackgroundResource(R.drawable.deck1);
break;
case 2:
deckImage.setBackgroundResource(R.drawable.deck2);
break;
case 3:
deckImage.setBackgroundResource(R.drawable.deck3);
break;
case 4:
deckImage.setBackgroundResource(R.drawable.deck4);
break;
}
在我的Blackberry版本中,我只是:
deckImage.setBitmap(Bitmap.getBitmapResource("/path/deck" + GameSettings.gameDeck + ".png"));
有没有办法在Android上使用资源ID完成类似的工作?
答案 0 :(得分:46)
使用getResources().getIdentifier()
中的Context
(例如Activity
),但如果您将多次使用该结果,请将结果缓存。 getIdentifier()
已在Resources
上实施。
例如:
int drawableId=getResources().getIdentifier("foo"+index, "drawable", getPackageName());
将返回R.drawable.fooN
的值,其中N
是index
给出的数字。
答案 1 :(得分:0)
在您的情况下,图像可绘制名称的开头字符相同,而数字不同。所以当你的应用程序被编译时。为您的可绘制名称生成的 id 是一系列连续增量。 这些是我将 drawable 命名为与您的示例代码相同时生成的 id
int drawable deck1 0x7f07007a //convert hex to decimal = 2131165306
int drawable deck2 0x7f07007b //convert hex to decimal = 2131165307
int drawable deck3 0x7f07007c //convert hex to decimal = 2131165308
int drawable deck4 0x7f07007d //convert hex to decimal = 2131165309
您可以查看android studio生成的R.txt文件。
所以简单的解决方案是:
int deckId = R.drawable.deck1 + GameSettings.gameDeck - 1
deckImage.setImageResource(deckId)