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

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

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

Теперь мне нужно изменить это изображение программно. Мне нужно удалить старый образ и добавить новый. Я сделал это:

myImgView.setBackgroundResource(R.drawable.monkey);

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

Как я могу это достичь?

Ответ 1

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

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

  myImgView.setBackgroundResource(R.drawable.monkey);

вы помещаете эту обезьяну в фоновый режим.

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

  myImgView.setImageResource(R.drawable.monkey);

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

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

*** С новым API-интерфейсом Android 22 getResources().getDrawable() теперь устарела. Это пример использования:

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);
}

Ответ 2

Предполагается использовать setImageResource вместо setBackgroundResource.

Ответ 3

myImgView.setImageResource(R.drawable.monkey);

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

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

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

Ответ 4

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

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

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

imgFp.setImageResource(R.drawable.fpscan);

чтобы установить исходное изображение программным способом вместо XML.

Ответ 5

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

imageView.setImageDrawable(ContextCompat.getDrawable(this, image));

Ответ 6

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

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