Reputation: 1194
I want to take a byte
and append it to a resource ID to be able to get the image that corresponds to that numbered deck in the game. It was easy to with paths on other devices, but with the Resource ID's I am unsure how I could go about do this.
Here's what I have now:
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;
}
In my Blackberry version of this, I simply had:
deckImage.setBitmap(Bitmap.getBitmapResource("/path/deck" + GameSettings.gameDeck + ".png"));
Is there a way to accomplish something similar using Resource IDs on Android?
Upvotes: 21
Views: 42244
Reputation: 733
In your case, the image drawable name are same at begining charecters and the different are the numbers. so when your app is complied. The generated ids for your drawable name are a sequence of consecutive increments. These are ids that generated when I named my drawable as same as your sample code
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
You can check the R.txt file which generated by android studio.
So the simple solution is:
int deckId = R.drawable.deck1 + GameSettings.gameDeck - 1
deckImage.setImageResource(deckId)
Upvotes: 0
Reputation: 1006614
Use getResources().getIdentifier()
from your Context
(e.g., Activity
), but please cache the result if you will use it more than once. getIdentifier()
is implemented on Resources
.
For example:
int drawableId=getResources().getIdentifier("foo"+index, "drawable", getPackageName());
would return the value of R.drawable.fooN
, where N
is the number given by index
.
For more, see this and this and this.
Upvotes: 48