Изменение источника ImageView - PullRequest
228 голосов
/ 04 июня 2010

У меня есть ImageView с исходным изображением, установленным в xml, используя следующий синтаксис:

   <ImageView 
      android:id="@+id/articleImg"
      style="@style/articleImgSmall_2"
      android:src="@drawable/default_m" />

Теперь мне нужно изменить это изображение программно. Что мне нужно сделать, это удалить старое изображение и добавить новое, хотя. Я сделал следующее:

myImgView.setBackgroundResource(R.drawable.monkey);

Это работает, но я заметил, что Android складывает новое изображение поверх старого (не спрашивайте меня, как я узнал, что это не актуально для обсуждения :) Мне обязательно нужно избавиться от старого, прежде чем устанавливать новый образ.

Как мне этого добиться?

Ответы [ 8 ]

570 голосов
/ 04 июня 2010

Изменение источника ImageView:

Используя setBackgroundResource() метод:

  myImgView.setBackgroundResource(R.drawable.monkey);

Вы помещаете эту обезьяну на задний план.

Iпредлагаем использовать setImageResource() метод:

  myImgView.setImageResource(R.drawable.monkey);

или setImageDrawable() метод:

myImgView.setImageDrawable(getResources().getDrawable(R.drawable.monkey));

*** Сновый Android API 22 * ​​1023 * устарел.Вот пример того, как использовать сейчас:

myImgView.setImageDrawable(getResources().getDrawable(R.drawable.monkey, getApplicationContext().getTheme()));

и как проверить для старых версий API:

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
     myImgView.setImageDrawable(getResources().getDrawable(R.drawable.monkey, getApplicationContext().getTheme()));
   } else {
     myImgView.setImageDrawable(getResources().getDrawable(R.drawable.monkey));
}
47 голосов
/ 04 июня 2010

Вы должны использовать setImageResource вместо setBackgroundResource.

28 голосов
/ 01 июня 2012
myImgView.setImageResource(R.drawable.monkey);

используется для установки изображения в текущем представлении изображения, но если вы хотите удалить это изображение тогда вы можете использовать этот код как:

((ImageView) v.findViewById(R.id.ImageView1)).setImageResource(0);

Теперь это удалит изображение из вашего изображения, потому что оно установило значение ресурсов на ноль.

18 голосов
/ 22 мая 2014

получить идентификатор ImageView как

ImageView imgFp = (ImageView) findViewById(R.id.imgFp);

затем используйте

imgFp.setImageResource(R.drawable.fpscan);

для программной установки исходного изображения вместо XML.

7 голосов
/ 18 августа 2016

Или попробуйте это. Для меня это нормально работает:

imageView.setImageDrawable(ContextCompat.getDrawable(this, image));
3 голосов
/ 09 января 2016

Если вы хотите установить в imageview изображение, которое находится внутри mipmap dirs , вы можете сделать это следующим образом:

myImageView.setImageDrawable(getResources().getDrawable(R.mipmap.my_picture)

2 голосов
/ 29 июня 2018

Просто напишите способ изменения изображения

public void setImage(final Context mContext, final ImageView imageView, int picture)
{
    if (mContext != null && imageView != null)
    {
        try
        {
            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP)
            {
                imageView.setImageDrawable(mContext.getResources().getDrawable(picture, mContext.getApplicationContext().getTheme()));
            } else
            {
                imageView.setImageDrawable(mContext.getResources().getDrawable(picture));
            }
        } catch (Exception e)
        {
            e.printStackTrace();
        }
    }
}
2 голосов
/ 06 апреля 2018

Дополнительный визуальный ответ

ImageView: setImageResource() (стандартный метод, соотношение сторон сохраняется)

enter image description here

View: setBackgroundResource() (изображение растянуто)

enter image description here

Обе

enter image description here

Мой полный ответ здесь .

...