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?
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));
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));
}
Vous êtes censé utiliser setImageResource
au lieu de setBackgroundResource
.
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.
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.
Ou essayez celui-ci. Pour moi ça marche bien:
imageView.setImageDrawable(ContextCompat.getDrawable(this, image));
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)
ImageView
: setImageResource()
(méthode standard, les proportions sont conservées)
View
: setBackgroundResource()
(l'image est étirée)
Tous les deux
Ma réponse plus complète est ici .
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();
}
}
}