Modification de la source 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" />

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

myImgView.setBackgroundResource(R.drawable.monkey);

Cela fonctionne mais j'ai remarqué qu'android empile la nouvelle image au-dessus de l'ancienne (ne me demandez pas comment j'ai découvert que ce n'est pas pertinent pour la discussion :). Je dois vraiment me débarrasser de l'Ancien avant de mettre le nouveau image.

Comment puis-je y parvenir?

208
demandé sur Rüdiger Herrmann 2010-06-04 18:07:39

8 réponses

Modification de la source ImageView:

À l'Aide de setBackgroundResource() méthode:

  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 API android 22 getResources().getDrawable() est maintenant obsolète. Ceci est un exemple comment utiliser 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));
}
529
répondu Jorgesys 2017-12-12 01:29:42

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

44
répondu David Hedlund 2010-06-04 14:10:26
myImgView.setImageResource(R.drawable.monkey);

Est utilisé pour définir l'image dans la vue image actuelle, mais si vous voulez supprimer cette image ensuite, 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, car elle a défini la valeur des ressources sur zéro.

25
répondu PIR FAHIM SHAH 2012-06-01 04:45:21

Récupère L'ID de ImageView comme

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

Ensuite, Utilisez

imgFp.setImageResource(R.drawable.fpscan);

Pour définir l'image source par programme à la place de XML.

18
répondu Neha Shukla 2014-05-22 11:08:48

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

imageView.setImageDrawable(ContextCompat.getDrawable(this, image));
4
répondu radu_paun 2016-08-18 14:32:31

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
répondu commonSenseCode 2016-01-08 21:05:47

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
répondu LOW 2018-06-29 06:58:56

Réponse visuelle supplémentaire

ImageView: setImageResource() (Méthode standard, le rapport d'aspect est conservé)

entrez la description de l'image ici

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

entrez la description de l'image ici

Les Deux

entrez la description de l'image ici

Ma réponse plus complète est ici .

0
répondu Suragch 2018-04-06 05:29:50