19

Currently I'm drawing a PNG image in my Android application like so:

ImageView image = new ImageView(context);
image.setImageDrawable(context.getResources().getDrawable(R.drawable.testimage))

If I have a list of image names in a database, is there a way to set the drawable above using the image name? I already have the code to go through the database, I'm just looking to draw the image based on the value taken from here.

For example, a record for the DB:

ID:    Name:    ImageName:
-      Test     testimage

So when I'm reading this record, I have a string with the value of "testimage" and I'd then want to set the image drawable to R.drawable.testimage.

One way I was thinking of doing it would be something like this:

int image = R.drawable.blank; // blank image

// testimage.png is the image name from the database
if(imageName.toString().equals("testimage.png"))
    image = R.drawable.testimage;
else if(imageName.toString().equals("another.png"))
    image = R.drawable.another;
else if(imageName.toString().equals("etc.png"))
    image = R.drawable.etc;

However this isn't very efficient!

Thanks

4 Answers 4

26

There is a method for doing that, you can retreive resource IDs by string using Resources.getIdentifier() http://developer.android.com/reference/android/content/res/Resources.html

Something like:

int resourceId = Activity.getResources().getIdentifier("testimage", "drawable", "your.package.name");
Sign up to request clarification or add additional context in comments.

Comments

23

I'm using:

int resId = getResources().getIdentifier("testimage", "drawable", getPackageName());
image.setImageResource(resId);

"testimage" - corresponds to for instance testimage.jpg, i.e. dont include ".jpg"

"drawable" - is the resource type, like in: @drawable/testimage

Check Resources.getIdentifier(...)

2 Comments

int resId = getResources().getIdentifier("testimage", "drawable", mainActivity.getPackageName()); Bitmap image = BitmapFactory.decodeResource(getResources(), resId);
Boo yeah! This was perfect.
0

Put you images in the assets/ folder and open

image.setImageURI("file:///android_asset/" + nameFromDB);

Comments

-2

String path = "sdcard/camera_app/name.jpg"; img.setImageDrawable(Drawable.createFromPath(path));

2 Comments

Without any explanation, this is not helpful.
You can use path for different images example String path = "sdcard/camera_app/image1.jpg"; or String path = "sdcard/camera_app/image2.jpg" this can be use in if else condtion to draw a image only you want.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.