286 votes

Changer la source de l'ImageView

J'ai un ImageView avec une image source définie dans le xml en utilisant la syntaxe suivante :

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

J'ai maintenant besoin de modifier cette image de manière programmatique. Ce que je dois faire, c'est supprimer l'ancienne image et en ajouter une nouvelle. Voici ce que j'ai fait :

myImgView.setBackgroundResource(R.drawable.monkey);

Cela fonctionne mais j'ai remarqué qu'Android empile la nouvelle image par-dessus l'ancienne (ne me demandez pas comment je l'ai découvert, ce n'est pas pertinent pour la discussion :). Je dois définitivement me débarrasser de l'ancienne image avant de définir la nouvelle.

Comment puis-je y parvenir ?

697voto

Elenasys Points 23268

Changement de la source de l'ImageView :

Utilisation de setBackgroundResource() méthode :

  myImgView.setBackgroundResource(R.drawable.monkey);

tu mets ce singe à l'arrière-plan.

Je suggère l'utilisation de setImageResource() méthode :

  myImgView.setImageResource(R.drawable.monkey);

ou avec setImageDrawable() méthode :

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

*** Avec la nouvelle API Android 22 getResources().getDrawable() est maintenant déprécié. Voici un exemple d'utilisation :

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

et comment valider les anciennes versions de l'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));
}

0 votes

Oh cool ... malheureusement, je viens de découvrir que je dois également remplacer un jeu d'images avec myImgView.setImageDrawable(img) ; le code que vous avez suggéré myImgView.setImageResource(R.drawable.monkey) ; n'est pas en mesure de le faire. comment puis-je me débarrasser du drawable avant de rendre le singe ? :) merci beaucoup

1 votes

GetDrawable(int) est maintenant déprécié et getDrawable(int,theme) est ajouté dans l'API-21. Que faire maintenant ? Pouvez-vous mettre à jour votre réponse ?

0 votes

L'appel nécessite le niveau 16 de l'API (le minimum actuel est de 13) : android.widget.ImageView #setBackground

58voto

David Hedlund Points 66192

Vous êtes censé utiliser setImageResource au lieu de setBackgroundResource .

4 votes

33voto

PIR FAHIM SHAH Points 191
myImgView.setImageResource(R.drawable.monkey);

est utilisé pour définir l'image dans la vue actuelle de l'image, mais si vous voulez supprimer cette image alors vous pouvez utiliser ce code comme :

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

Maintenant, cela va supprimer l'image de votre vue d'image, parce qu'il a mis la valeur des ressources à zéro.

18voto

Neha Shukla Points 806

Obtenir l'ID de l'ImageView en tant que

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

puis utiliser

imgFp.setImageResource(R.drawable.fpscan);

pour définir l'image source par programme plutôt que par XML.

8voto

radu_paun Points 433

Ou essayez celui-ci. Pour moi, il fonctionne bien :

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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X