Changer la source d'ImageView

257

J'ai un ImageViewavec 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" />

Maintenant, je dois changer cette image par programme. Ce que je dois faire, c'est supprimer l'ancienne image et en ajouter une nouvelle. Ce que j'ai fait, c'est ceci:

myImgView.setBackgroundResource(R.drawable.monkey);

Cela fonctionne, mais j'ai remarqué qu'Android empile la nouvelle image sur l'ancienne (ne me demandez pas comment j'ai découvert que cela n'était pas pertinent pour la discussion :). Je dois définitivement me débarrasser de l'ancienne avant de définir la nouvelle image.

Comment puis-je y parvenir?

nourdine
la source

Réponses:

636

Modification de la source ImageView:

En utilisant la setBackgroundResource()méthode:

  myImgView.setBackgroundResource(R.drawable.monkey);

vous mettez ce singe en arrière-plan.

Je suggère l'utilisation de la 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 désormais obsolète. C'est un exemple comment utiliser maintenant:

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

et comment valider pour les anciennes versions d'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));
}
Jorgesys
la source
oh cool ... malheureusement, je viens de découvrir que je dois également remplacer un ensemble d'images par 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 dessinable avant de rendre le singe? :) merci beaucoup
nourdine
1
getDrawable (int) est désormais obsolète et getDrawable (int, theme) est ajouté dans API-21. Que faire maintenant? Pouvez-vous mettre à jour votre réponse?
mubeen
L'appel nécessite le niveau 16 de l'API (le minimum actuel est de 13): android.widget.ImageView#setBackground
Iman Marashi
ContextCompatpour pouvoir être dessiné sansgetTheme
Outofdate
50

Vous êtes censé utiliser à la setImageResourceplace de setBackgroundResource.

David Hedlund
la source
32
myImgView.setImageResource(R.drawable.monkey);

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

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

maintenant, cela supprimera l'image de votre vue d'image, car elle a défini la valeur des ressources à zéro.

PIR FAHIM SHAH
la source
18

obtenir l'ID d'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 programmation à la place à partir de XML.

Neha Shukla
la source
8

Ou essayez celui-ci. Pour moi ça marche bien:

imageView.setImageDrawable(ContextCompat.getDrawable(this, image));
radu_paun
la source
5

Réponse visuelle supplémentaire

ImageView: setImageResource()(méthode standard, les proportions sont conservées)

entrez la description de l'image ici

View: setBackgroundResource()(l'image est étirée)

entrez la description de l'image ici

Tous les deux

entrez la description de l'image ici

Ma réponse plus complète est ici .

Suragch
la source
3

Si vous souhaitez définir dans imageview une image qui se trouve dans les répertoires mipmap, vous pouvez le faire comme ceci:

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

CommonSenseCode
la source
2

Il suffit d'écrire une méthode pour changer l'image

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();
        }
    }
}
FAIBLE
la source