通过ID动态获取drawable

时间:2010-03-10 02:31:57

标签: java android

我想取一个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完成类似的工作?

2 个答案:

答案 0 :(得分:46)

使用getResources().getIdentifier()中的Context(例如Activity),但如果您将多次使用该结果,请将结果缓存。 getIdentifier()已在Resources上实施。

例如:

int drawableId=getResources().getIdentifier("foo"+index, "drawable", getPackageName());

将返回R.drawable.fooN的值,其中Nindex给出的数字。

有关详情,请参阅thisthis以及this

答案 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)
相关问题