309 votes

Comment effacer une ImageView dans Android ?

Je réutilise ImageView pour mes écrans, mais à un moment donné, je n'ai plus de valeurs à mettre.

Alors, comment effacer un ImageView dans Android ?

J'ai essayé :

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

Aucune d'entre elles n'a effacé la vue, l'image précédente est toujours affichée.

1 votes

Je suggère de charger l'image par défaut lorsque vous n'avez pas de valeur.

3 votes

Je n'ai pas d'image par défaut, juste un arrière-plan. J'ai besoin de n'avoir que l'arrière-plan.

0 votes

Je pense que la réponse acceptée doit être modifiée ici. Existe-t-il une disposition sur stackoverflow pour changer/modifier une réponse acceptée en une réponse réelle (ou une meilleure réponse) à partir d'une réponse "de contournement" ? Parce que beaucoup d'utilisateurs (comme moi) peuvent opter pour la réponse acceptée plutôt que pour une meilleure réponse.

608voto

Mario Lenci Points 3214

J'avais l'habitude de le faire avec le dennis.sheppard solution :

viewToUse.setImageResource(0);

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

Je pense que la meilleure solution est la suivante :

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

C'est la solution qui me plaît le plus parce qu'il n'y a rien de compliqué à inverser l'état et que ce que l'on fait est clair.

3 votes

Je pense que l'utilisation de setImageResource avec un identifiant de couleur entraînera des problèmes de plantage sur Android 2.2.1.

0 votes

Qui est possible. Je n'ai pas d'appareil pour le tester. l'avez-vous testé ? si c'est le cas, écrivez ici et j'éditerai la réponse ( et mon code :) ). Je l'ai testé sur un xperia U20i avec une 2.1-update1 et cela fonctionne comme prévu.

2 votes

Pour moi, viewToUse.setImageResource(Android.R.color.transparent) ; code

146voto

Kon Points 16125

J'ai eu un problème similaire, où j'ai eu besoin de supprimer complètement les ImageViews de l'écran. Certaines des réponses données ici m'ont conduit dans la bonne direction, mais en fin de compte, appeler setImageDrawable() a fonctionné pour moi :

imgView.setImageDrawable(null);

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

3 votes

Cela fonctionne de manière fiable, du moins dans mon application. setImageResource(0) fonctionne parfois, mais pas toujours.

5 votes

Si vous avez défini l'image à l'aide de setImageBitmap, voici ce que vous voulez

0 votes

C'est à mon avis la meilleure réponse ! Elle est propre, valable et très courte. Il n'est pas nécessaire de définir un drawable vierge et de l'appliquer ou d'autres choses de ce genre.

78voto

dennis.sheppard Points 777

Je sais que c'est vieux, mais j'ai réussi à 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 fonctionné parfaitement.

2 votes

En fait, la définition de N'IMPORTE QUELLE ressource d'image invalide fonctionne (-1, 45, etc.).

8 votes

Non, la valeur -1 entraîne une exception Android.content.res.Resources$NotFoundException. 0 semble fonctionner.

28 votes

Dans ce cas, lorsque vous faites défiler votre listview, l'imageview qui la définit comme 0 affichera la mauvaise image (elle affichera l'image d'une autre imageview). La résolution ci-dessous permet donc de résoudre ce problème viewToUse.setImageResource(Android.R.color.transparent) ;

15voto

Daniel Lew Points 39063

Il semble que vous souhaitiez une image par défaut pour définir votre ImageView lorsqu'il n'affiche pas une autre image. Voici comment l'application Contacts procède :

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

68 votes

Non, je ne veux pas de ça. Je veux juste effacer le contenu. L'utilisateur peut ensuite sélectionner une nouvelle image.

0 votes

Je ne comprends donc pas. Vous ne voulez pas qu'une image soit affichée, mais vous n'avez pas d'image par défaut à montrer à l'utilisateur lorsqu'aucune image n'est affichée. Il y a soit quelque chose que vous faire de le montrer à l'utilisateur ou non. Vous pourriez même définir l'arrière-plan comme étant la ressource de l'image.

0 votes

Si vous êtes familier avec Contacts, il existe un substitut de cadre d'arrière-plan pour les cartes de contact, je l'ai dans mon code. <ImageView android:id="@+id/photo" android:layout_width="54dip" android:layout_height="57dip" android:layout_marginLeft="0dip" android:background="@drawable/quickcontact_photo_frame" /> Il s'agit d'un simple fond gris sur lequel vient s'insérer la photo.

12voto

Brad English Points 42

Si aucune de ces solutions ne permet d'effacer une image que vous avez déjà définie (en particulier setImageResource(0) ou setImageResources(android.R.color.transparent) Vérifier que l'image actuelle n'est pas définie comme arrière-plan à l'aide de la fonction setBackgroundDrawable(...) ou quelque chose de similaire.

Votre code se contentera de définir la ressource image au premier plan comme quelque chose de transparent devant l'image d'arrière-plan que vous avez définie et qui s'affichera quand même.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X