web-dev-qa-db-fra.com

Comment effacer un ImageView dans Android?

Je réutilise ImageViews pour mes affichages, mais à un moment donné je n'ai pas de valeurs pour le dire.

Alors, comment effacer une ImageView dans Android?

J'ai essayé:

mPhotoView.invalidate();
mPhotoView.setImageBitmap(null);

Aucun d'entre eux n'a effacé la vue, il montre toujours l'image précédente.

231
Pentium10

Je le faisais avec la solution dennis.sheppard :

viewToUse.setImageResource(0);

cela fonctionne mais il n'est pas documenté, donc il n'est pas clair si cela affecte quelque chose d'autre dans la vue (vous pouvez vérifier le Code ImageView si vous voulez, je ne l'ai pas fait).

Je pense que la meilleure solution est:

viewToUse.setImageResource(Android.R.color.transparent);

J'aime cette solution, car la plupart du temps, il n’est pas difficile de revenir en arrière et c’est clair ce qu’il fait.

469
Mario Lenci

J'ai eu un problème similaire, où je devais essentiellement supprimer ImageViews de l'écran complètement. Certaines des réponses ici m'ont conduit dans la bonne direction, mais finalement, appeler setImageDrawable () a fonctionné pour moi: 

imgView.setImageDrawable(null);

(Comme mentionné dans le commentaire, cette utilisation est documentée dans la documentation officielle: ImageView # setImageDrawable .)

100
Kon

Je sais que c’est vieux, mais j’ai pu le faire avec 

viewToUse.setImageResource(0);

Cela ne semble pas devoir fonctionner, mais j'ai essayé sur un coup de tête, et cela a parfaitement fonctionné.

79
dennis.sheppard

Cela ressemble à ce que vous voulez est une image par défaut pour définir votre ImageView sur quand il n'affiche pas une image différente. Voici comment l'application Contacts le fait:

if (photoId == 0) {
    viewToUse.setImageResource(R.drawable.ic_contact_list_picture);
} else {
    // ... here is where they set an actual image ...
}
17
Daniel Lew

J'ai essayé cela pour effacer Image et DrawableCache dans ImageView

ImgView.setImageBitmap(null);
ImgView.destroyDrawingCache();

J'espère que cela fonctionne pour vous!

10
nandha

Si aucune de ces solutions n'efface une image que vous avez déjà définie (en particulier setImageResource(0) ou setImageResources(Android.R.color.transparent), vérifiez que l'image actuelle n'est pas définie en tant qu'arrière-plan à l'aide de setBackgroundDrawable(...) ou quelque chose de similaire.

Votre code définira simplement la ressource image en avant-plan sur quelque chose de transparent devant l'image d'arrière-plan que vous avez définie et continuera de s'afficher.

9
Brad English

Hey je sais que je suis extrêmement en retard pour cette réponse, mais juste pensé que je dois partager cela,

La méthode à utiliser lorsque vous réinitialisez l’image doit être la même que celle que vous avez appelée lorsque vous la définissiez.

Lorsque vous voulez réinitialiser la source de l'image @ dennis.sheepard answer ne fonctionne correctement que si vous définissez à l'origine l'image dans le bitmap à l'aide de setImageResource()

par exemple,

j'avais utilisé setImageBitmap() et donc le réglage de setImageResource(0) n'a pas fonctionné, j'ai plutôt utilisé setImageBitmap(null)

5
Ajay

J'ai pu y parvenir en définissant un drawable (quelque chose comme blank_white_shape.xml):

<shape xmlns:Android="http://schemas.Android.com/apk/res/Android"       
       Android:shape="rectangle">
    <solid Android:color="@Android:color/white"/>
</shape>

Ensuite, lorsque je souhaite effacer la vue de l'image, j'appelle simplement 

 imageView.setImage(R.drawable.blank_white_shape);

Cela fonctionne à merveille pour moi!

3
kwasi

Pour une image d'élément ListView, vous pouvez définir ImageView.setVisibility(View.INVISIBLE) ou ImageView.setImageBitmap(null) dans l'adaptateur de liste pour le cas "aucune image".

1
Arvis

Comme kwasi écrit et golu édité, vous pouvez utiliser transparent au lieu de blanc:

Fichier drawable/transparent.xml

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:Android="http://schemas.Android.com/apk/res/Android" >
    <solid Android:color="@Android:color/transparent"/>
</shape>

Dans une activité, une vue, etc.:

view.setImageResource(R.drawable.transparent);
1
KitKat

Je faisais face au même problème. J'ai changé la couleur de fond de la vue en couleur de fond de mise en page.

 edit_countflag.setBackgroundColor(Color.parseColor("#ffffff"));

// ensuite définir l'image

edit_countflag.setImageResource(R.drawable.flag_id);
0

Si vous utilisez la bibliothèque de support, vous obtenez AppCompatImageView au lieu de ImageView, qui prend en charge setImageResource(0) sur tous les périphériques. Vous devriez donc pouvoir l'utiliser de la même manière qu'en utilisant setImageDrawable(null) et setImageBitmap(null)

Sinon, cela devrait fonctionner correctement à partir d'une version Android. Selon le code d'Android et d'après mes tests, je pense que l'utilisation de setImageResource(0) à partir d'Android API 22 (5.1) devrait être sûre. Vous pouvez voir le code Android de API 22 vs API 21, here

0
android developer

Cela fonctionne pour moi. 

emoji.setBackground(null);

Cela se bloque en cours d'exécution.

viewToUse.setImageResource(Android.R.color.transparent);  
0
sbchitra