Установка изображений Android из строкового значения - PullRequest
18 голосов
/ 30 ноября 2010

В настоящее время я рисую изображение PNG в своем приложении для Android, например:

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

Если у меня есть список имен изображений в базе данных, есть ли способ установить рисунок выше, используя имя изображения? У меня уже есть код для просмотра базы данных, я просто хочу нарисовать изображение на основе значения, взятого отсюда.

Например, запись для БД:

ID:    Name:    ImageName:
-      Test     testimage

Поэтому, когда я читаю эту запись, у меня есть строка со значением «testimage», и я бы тогда хотел установить изображение для рисования равным R.drawable.testimage.

Одним из способов, которым я думал об этом, было бы что-то вроде этого:

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;

Однако это не очень эффективно!

Спасибо

Ответы [ 4 ]

27 голосов
/ 30 ноября 2010

Для этого есть метод, вы можете получить идентификаторы ресурса по строке, используя Resources.getIdentifier () http://developer.android.com/reference/android/content/res/Resources.html

Что-то вроде:

int resourceId = Activity.getResources().getIdentifier("testimage", "drawable", "your.package.name");
22 голосов
/ 30 ноября 2010

Я использую:

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

"testimage" - соответствует, например, testimage.jpg, т.е. не включать ".jpg"

"drawable" - это тип ресурсакак в: @ drawable / testimage

Check Resources.getIdentifier (...)

0 голосов
/ 02 августа 2016

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

0 голосов
/ 30 ноября 2010

Поместите ваши изображения в папки / активы и откройте

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