web-dev-qa-db-fra.com

Changer de source ImageView

J'ai un ImageView avec une image source définie dans le XML avec 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. Voici ce que j'ai fait:

myImgView.setBackgroundResource(R.drawable.monkey);

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

Comment puis-je y arriver?

233
nourdine

Changer de source ImageView:

Utilisation de la méthode setBackgroundResource() :

  myImgView.setBackgroundResource(R.drawable.monkey);

vous mettez ce singe en 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 Android API 22 getResources().getDrawable() est maintenant obsolète. Voici un exemple d'utilisation maintenant:

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

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

47
David Hedlund
myImgView.setImageResource(R.drawable.monkey);

est utilisé pour définir l'image dans la vue d'image courante, mais si vous voulez 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 la valeur des ressources a été définie sur zéro.

28
PIR FAHIM SHAH

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

18
Neha Shukla

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

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

Si vous voulez définir dans imageview une image qui se trouve dans le mipmap dirs, vous pouvez le faire comme ceci:

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

3
CommonSenseCode

Réponse visuelle supplémentaire

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

enter image description here

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

enter image description here

Tous les deux

enter image description here

Ma réponse plus complète est ici .

3
Suragch

Il suffit d'écrire une méthode pour changer imageview

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
LOW