Использование setImageDrawable динамически для установки изображения в ImageView - PullRequest
110 голосов
/ 27 декабря 2011

Я динамически генерирую строку из базы данных с таким же именем изображения в папке drawable.

Теперь я хочу установить это значение для ImageView, используя setImageDrawable(R.id.StringGenerated) динамически.

Любые предложения ..

Ответы [ 16 ]

177 голосов
/ 27 декабря 2011

Попробуйте это,

int id = getResources().getIdentifier("yourpackagename:drawable/" + StringGenerated, null, null);

Это вернет идентификатор отрисовки, к которой вы хотите получить доступ ... Затем вы можете установить изображение в окне просмотра изображения, выполнив следующее

imageview.setImageResource(id);
93 голосов
/ 27 декабря 2011
Drawable image = ImageOperations(context,ed.toString(),"image.jpg");
            ImageView imgView = new ImageView(context);
            imgView = (ImageView)findViewById(R.id.image1);
            imgView.setImageDrawable(image);

или

setImageDrawable(getResources().getDrawable(R.drawable.icon));
70 голосов
/ 09 марта 2015

Я лично предпочитаю использовать метод setImageResource() вот так.

ImageView myImageView = (ImageView)findViewById(R.id.myImage);
myImageView.setImageResource(R.drawable.icon);
24 голосов
/ 27 декабря 2011

Именимые имена ресурсов не хранятся в виде строк, поэтому вам придется преобразовать строку в целочисленную константу, сгенерированную во время сборки. Вы можете использовать класс Resources для преобразования строки в это целое число.

Resources res = getResources();
int resourceId = res.getIdentifier(
   generatedString, "drawable", getPackageName() );
imageView.setImageResource( resourceId );

Это преобразует сгенерированную строку в целое число, которое ImageView может использовать для загрузки правильного изображения.

В качестве альтернативы, вы можете использовать идентификатор, чтобы загрузить Drawable вручную, а затем установить изображение, используя это рисование вместо идентификатора ресурса.

Drawable drawable = res.getDrawable( resourceId );
imageView.setImageDrawable( drawable );
13 голосов
/ 11 февраля 2015

Так же просто, как этот ответ:

Drawable myDrawable = getResources().getDrawable(R.drawable.pic);
imageview.setImageDrawable(myDrawable);
8 голосов
/ 13 ноября 2013

Это работает, по крайней мере, в Android APIсбой задержки ... рассмотрите возможность использования setImageDrawable () или setImageBitmap (). " как указано в chetto

4 голосов
/ 01 апреля 2017

Все опубликованные ответы не применяются сегодня.Например, getDrawable () устарела.Вот обновленный ответ, ура!

ContextCompat.getDrawable(mContext, drawable)

Из документированного метода

public static final android.graphics.drawable.Drawable getDrawable (@NotNull android.content.Context context,
@ android.support.annotation.DrawableRes int id

3 голосов
/ 11 ноября 2015

Если вы не можете получить объект Resources, подобный этому, в классе, который не является Activity, вы должны добавить метод getContext () для getResources (), например

ImageView image = (ImageView) v.findViewById(R.id.item_image);
int id = getContext().getResources().getIdentifier(imageName, "drawable", getContext().getPackageName());
image.setImageResource(id);
2 голосов
/ 17 марта 2019

Вы можете попробовать использовать этот код:

ImageView ImgView = (ImageView)findViewById(R.id.ImgView);
ImgView.setImageResource(R.drawable.myicon);
2 голосов
/ 27 июня 2018

imageView.setImageDrawable(getResources().getDrawable(R.drawable.my_drawable));

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...