Wie lösche ich eine ImageView in Android?

276

Ich verwende ImageViews für meine Displays wieder, aber irgendwann habe ich keine Werte mehr, um es auszudrücken.

Wie lösche ich ein ImageViewin Android?

Ich habe es versucht:

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

Keiner von ihnen hat die Ansicht gelöscht, es wird immer noch das vorherige Bild angezeigt.

Pentium10
quelle
1
Ich schlage vor, das Standardbild zu laden, wenn Sie keinen Wert haben.
Praveen
3
Ich habe kein Standardbild, nur einen Hintergrund. Ich muss nur den Hintergrund haben.
Pentium10
Ich denke, akzeptierte Antworten müssen hier geändert werden. Gibt es eine Bestimmung zum Stapelüberlauf, um akzeptierte Antworten in tatsächliche Antworten (oder bessere Antworten) aus einer "Problemumgehungs" -Antwort zu ändern / zu verschieben? Weil viele Benutzer (wie ich) eher akzeptiert als besser antworten können
Shirish Herwade
1
@ ShirishHerwade ok geändert
Pentium10
Ich hatte das gleiche Problem, ich mache es so: stackoverflow.com/a/50448536/5697474
Syed Danish Haider

Antworten:

539

Ich habe es mit der dennis.sheppard- Lösung gemacht:

viewToUse.setImageResource(0);

es funktioniert, aber es ist nicht dokumentiert, so dass es nicht wirklich klar ist, ob es etwas anderes in der Ansicht bewirkt (Sie können den ImageView-Code überprüfen , wenn Sie möchten , ich habe es nicht getan).

Ich denke, die beste Lösung ist:

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

Ich mag diese Lösung am meisten, weil es nicht schwierig ist, den Zustand wiederherzustellen, und es ist auch klar, was sie tut.

Mario Lenci
quelle
3
Ich denke, die Verwendung von setImageResource mit einer Farbkennung führt zu Absturzproblemen unter Android 2.2.1
Blundell,
2
für mich funktioniert die viewToUse.setImageResource (android.R.color.transparent); Code
Javier
3
Vorsicht, wenn Sie tatsächlich eine Ressource mit der ID 0 haben, wird dies tatsächlich als Zeichnungsansicht festgelegt. Ich bin mir nicht sicher, wie hoch die Chancen sind, dass ich das als Ausweis habe.
Chris
1
Ich hatte Probleme mit der setImageResource (0) - hat nicht immer funktioniert. Die Transparenz ist jedoch sehr zuverlässig. Vielen Dank!
Scott Biggs
6
viewToUse.setImageResource(0);funktioniert nicht, aber das hat viewToUse.setImageResource(android.R.color.transparent);funktioniert.
Zionpi
118

Ich hatte ein ähnliches Problem, bei dem ich ImageViews grundsätzlich vollständig vom Bildschirm entfernen musste. Einige der Antworten hier führten mich in die richtige Richtung, aber letztendlich funktionierte das Aufrufen von setImageDrawable () für mich:

imgView.setImageDrawable(null);

(Wie im Kommentar erwähnt, ist eine solche Verwendung in den offiziellen Dokumenten dokumentiert: ImageView # setImageDrawable .)

Kon
quelle
3
Dies funktioniert zumindest in meiner App zuverlässig. setImageResource (0) funktioniert manchmal, andere jedoch nicht.
Hong
5
Wenn Sie das Bild mit setImageBitmap festgelegt haben, ist dies das, was Sie wollen
Kevin Parker
Dies ist meiner Meinung nach die beste Antwort! Es ist sauber, gültig und sehr kurz. Sie müssen kein leeres Zeichen definieren und es oder ähnliches anwenden.
Potaito
Diese Antwort funktioniert tatsächlich zuverlässig! Und es ist der früheste Beitrag, in dem dieser Code als Lösung angegeben wird. Daher habe ich diesen einen und nicht andere Beiträge mit der gleichen Antwort bewertet.
Das Original Android
2
Diese Antwort ist tatsächlich in den offiziellen Dokumenten dokumentiert: developer.android.com/reference/android/widget/…
79

Ich weiß, dass dies alt ist, aber ich konnte dies mit erreichen

viewToUse.setImageResource(0);

Scheint nicht so, als ob es funktionieren sollte, aber ich habe es aus einer Laune heraus versucht und es hat perfekt funktioniert.

dennis.sheppard
quelle
2
Tatsächlich funktioniert das Setzen auf JEDE ungültige
Bildressource
8
Nein, wenn Sie -1 setzen, erhalten Sie android.content.res.Resources $ NotFoundException. 0 scheint zu funktionieren.
NateS
28
In diesem Fall, wenn Sie durch Ihre Listenansicht scrollen. In der Bildansicht, in der 0 festgelegt wurde, wird das falsche Bild angezeigt (es wird ein Bild aus einer anderen Bildansicht angezeigt), sodass die folgende Auflösung dies ermöglicht. viewToUse.setImageResource (android.R.color.transparent);
Obst A.Suk
3
Ich habe diesen Fehler einmal erhalten, als ich diese Methode ausprobiert habe: "android.content.res.Resources $ NotFoundException: Resource ID # 0x0", daher scheint das Festlegen eines leeren Bildes der beste Weg zu sein, um ImageView zu löschen
Pavel Alexeev
16

Es hört sich so an, als ob Sie ein Standardbild wünschen, auf das Sie Ihre ImageView einstellen sollen, wenn kein anderes Bild angezeigt wird. So macht es die Kontaktanwendung:

if (photoId == 0) {
    viewToUse.setImageResource(R.drawable.ic_contact_list_picture);
} else {
    // ... here is where they set an actual image ...
}
Dan Lew
quelle
67
Nein, das will ich nicht. Ich möchte nur den Inhalt löschen. Der Benutzer kann danach ein neues Bild auswählen.
Pentium10
3
Die Kontakte-App ist Open Source ( android.git.kernel.org/?p=platform/packages/apps/… ). Ich habe den Quellcode untersucht. Es stellt sich heraus, dass sie ein QuickContactBadge (eine Unterklasse von ImageView) verwenden. Wenn sie kein Foto haben, verwenden sie setImageResource, um ein Standardbild festzulegen. Überprüfen Sie com.android.contacts.ContactsListActivity # ContactItemListAdapter auf Details, insbesondere in getView ().
Dan Lew
9
Warum haben Sie diese Antwort als die richtige überprüft, wenn es nicht das ist, was Sie wollen?
Arniotaki
3
Daniel Es kann viele Gründe geben, warum Menschen das Bild klar haben wollen.
K - Die Toxizität in SO nimmt zu.
1
Er möchte kein Standardbild. Er möchte, dass es gelöscht wird.
EpicPandaForce
13

Ich habe dies versucht, um Image und DrawableCache in ImageView zu löschen

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

Ich hoffe das funktioniert bei dir!

Nandha
quelle
9

Wenn keine dieser Lösungen ein bereits festgelegtes Bild löscht (insbesondere setImageResource(0)oder setImageResources(android.R.color.transparent), stellen Sie sicher, dass das aktuelle Bild nicht als Hintergrund mit setBackgroundDrawable(...)oder ähnlichem festgelegt ist.

Ihr Code setzt nur die Bildressource im Vordergrund auf etwas Transparentes vor dem von Ihnen festgelegten Hintergrundbild und wird weiterhin angezeigt.

Brad English
quelle
6

Hey, ich weiß, ich bin sehr spät zu dieser Antwort, aber ich dachte nur, ich muss das teilen,

Die Methode, die beim Zurücksetzen des Bildes aufgerufen werden soll, muss dieselbe sein, die Sie beim Einstellen aufgerufen haben.

Wenn Sie die Bildquelle zurücksetzen möchten, funktioniert die Antwort @ dennis.sheepard nur dann einwandfrei , wenn Sie das Bild ursprünglich in der Bitmap mit verwendensetImageResource()

zum Beispiel,

Ich hatte verwendet setImageBitmap()und daher hat die Einstellung setImageResource(0)nicht funktioniert, stattdessen habe ich verwendet setImageBitmap(null).

Ajay
quelle
1
Sie haben Recht Ajay, ich habe das gleiche beobachtet. Ich habe setImageBitmap () / setImageResource () alternativ für dieselbe Bildansicht verwendet, abhängig von den Bedingungen. Daher musste ich alternativ setImageResource (0) / setImageBitmap (null) verwenden, um die Bildansicht zu löschen. Vielen Dank!
Monica M
5

Wenn Sie Glide verwenden, können Sie dies so tun.

Glide.with(yourImageView).clear(yourImageView)
Mojtaba Haddadi
quelle
Danke refig, es hilft sehr.
ucMedia
3

Ich konnte dies erreichen, indem ich ein Drawable definierte (so etwas wie blank_white_shape.xml):

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

Wenn ich dann die Bildansicht löschen möchte, rufe ich einfach an

 imageView.setImage(R.drawable.blank_white_shape);

Das funktioniert wunderbar für mich!

kwasi
quelle
2

Für das ListView-Elementbild können Sie ImageView.setVisibility(View.INVISIBLE)oder ImageView.setImageBitmap(null)im Listenadapter den Fall "kein Bild" festlegen .

Arvis
quelle
2

Während kwasi schrieb und golu bearbeitete, können Sie transparent anstelle von weiß verwenden:

Datei 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>

Innerhalb einer Aktivität, Ansicht usw.:

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

Das funktioniert bei mir.

emoji.setBackground(null);

Dies stürzt zur Laufzeit ab.

viewToUse.setImageResource(android.R.color.transparent);  
sbchitra
quelle
0

Um das Bild in ImageView zu entfernen, verwenden Sie:

title_image.setImageResource(-1);

Es funktioniert für mich

Tobore Igbe
quelle
0

Wenn Sie die Support-Bibliothek verwenden, erhalten Sie AppCompatImageViewstattdessen die Unterstützung ImageView, die setImageResource(0)auf allen Geräten unterstützt wird. Sie sollten sie also genauso verwenden können wie setImageDrawable(null)undsetImageBitmap(null)

Andernfalls sollte es ab einer Android-Version einwandfrei funktionieren. Nach dem Code von Android und nach meinen Tests sollte die Verwendung setImageResource(0)von Android API 22 (5.1) sicher sein . Sie können den Android-Code von API 22 gegenüber API 21 hier sehen

Android-Entwickler
quelle
0

Ich hatte das gleiche Problem, bei dem ich die Hintergrundfarbe der Ansicht in die Hintergrundfarbe des Layouts geändert habe.

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

// dann setze das Bild

edit_countflag.setImageResource(R.drawable.flag_id);
Syed Danish Haider
quelle
0

Ich habe versucht, das Image der ImageView auch mit zu entfernen, ImageView.setImageRessource(0)aber es hat bei mir nicht funktioniert.
Zum Glück habe ich diese Nachricht in den Protokollen erhalten:

Caused by: java.lang.IllegalStateException: The specified child already has a parent. 
You must call removeView() on the child's parent first.

Nehmen wir also an, layoutmanagerist Ihre Instanz für das Layout, als Sie das tun müssen:

RelativeLayout layoutManager = new RelativeLayout(this);
ImageView image = new ImageView(this);

// this line worked for me
layoutManager.removeView(image);
TornaxO7
quelle
-1

Kann ich nur darauf hinweisen, was Sie alle zu setzen versuchen und int, wo es ein Drawable erwartet.

sollten Sie nicht Folgendes tun?

imageview.setImageDrawable(this.getResources().getDrawable(R.drawable.icon_image));

imageview.setImageDrawable(getApplicationContext().getResources().getDrawable(R.drawable.icon_profile_image));
Aaron Newton
quelle