Как установить образ imageView из строки?
У меня есть список записей и некоторые растровые файлы в каталоге res/drawable-mdpi. Я пытаюсь загрузить изображение, соответствующее строковому значению, выбранному из списка, путем создания строки пути и использования растрового изображения factory. Проблема в том, что я не думаю, что мой путь прав, потому что битмап всегда равен нулю, даже для изображения по умолчанию.
String name = entries.get(position);
String img = "res/drawable/logo_" + name.toLowerCase() + ".png"; // create the file name
icon.setScaleType(ImageView.ScaleType.CENTER_CROP);
// check to see if the file exists
File file = new File(img);
if (file.exists()){
bm = BitmapFactory.decodeFile(img);
}
else{// use the default icon
bm = BitmapFactory.decodeFile("logo_default.png");
}
// set the image and text
icon.setImageBitmap(bm);
Скопирует ли каталог res даже на устройство? Каков правильный путь, который я должен использовать, или я должен идти об этом по-другому?
Спасибо
Ответы
Ответ 1
Если у вас есть изображение в папке с выталкиванием, вы делаете это неправильно.
попробуйте что-то вроде этого
Resources res = getResources();
String mDrawableName = "logo_default";
int resID = res.getIdentifier(mDrawableName , "drawable", getPackageName());
Drawable drawable = res.getDrawable(resID );
icon.setImageDrawable(drawable );
Ответ 2
Не нужно использовать getDrawable(), вы напрямую используете идентификатор ресурса, например
String mDrawableName = "myimageName";
int resID = res.getIdentifier(mDrawableName , "drawable", getPackageName());
imgView.setImageResource(resID);
Ответ 3
Вы можете создать общую функцию для получения изображения для рисования следующим образом:
public static Drawable getDrawable(Context mContext, String name) {
int resourceId = mContext.getResources().getIdentifier(name, "drawable", mContext.getPackageName());
return mContext.getResources().getDrawable(resourceId);
}
Ответ 4
ImageView img = (ImageView) findViewById(R.id.{ImageView id});
img.setImageResource(getResources().getIdentifier("ImageName","drawable",getPackageName()));