¿Cómo borrar un ImageView en Android?

277

Estoy reutilizando ImageViews para mis pantallas, pero en algún momento no tengo valores para ponerlo.

Entonces, ¿cómo borrar un ImageView en Android?

He intentado:

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

Ninguno de ellos ha borrado la vista, todavía muestra la imagen anterior.

Pentium10
fuente
1
Sugiero cargar la imagen predeterminada cuando no tiene ningún valor.
Praveen
3
No tengo una imagen predeterminada, solo un fondo. Necesito tener solo el fondo.
Pentium10
Creo que la respuesta aceptada necesita ser cambiada aquí. ¿Hay alguna disposición en stackoverflow para cambiar / mover la respuesta aceptada a la respuesta real (o una respuesta mejor) de una respuesta 'alternativa'? Debido a que muchos usuarios (como yo) pueden ir por una respuesta aceptada en lugar de una mejor
Shirish Herwade
1
@ShirishHerwade ok cambiado
Pentium10
Estaba enfrentando el mismo problema, lo hago así: stackoverflow.com/a/50448536/5697474
Syed Danish Haider

Respuestas:

540

Solía ​​hacerlo con la solución dennis.sheppard :

viewToUse.setImageResource(0);

funciona, pero no está documentado, por lo que no está realmente claro si afecta a otra cosa en la vista (puede verificar el código de ImageView si lo desea, no lo hice).

Creo que la mejor solución es:

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

Esta solución me gusta más porque no hay nada complicado en revertir el estado y también está claro lo que está haciendo.

Mario Lenci
fuente
3
Creo que usar setImageResource con un identificador de color le dará problemas de bloqueo en Android 2.2.1
Blundell
2
para mí funciona el viewToUse.setImageResource (android.R.color.transparent); código
Javier
3
tenga cuidado con esto, si realmente tiene un recurso con una identificación de 0, esto de hecho establecerá ese dibujo como su vista de daño. Aunque no estoy seguro de cuáles son las posibilidades de tener eso como una identificación ...
Chris
1
Tuve problemas con setImageResource (0), no siempre funcionó. Pero establecerlo en transparente es muy confiable. ¡Gracias!
Scott Biggs
66
viewToUse.setImageResource(0);no funcionó, pero viewToUse.setImageResource(android.R.color.transparent);funcionó.
zionpi
119

Tuve un problema similar, donde básicamente necesitaba eliminar ImageViews de la pantalla por completo. Algunas de las respuestas aquí me llevaron en la dirección correcta, pero finalmente llamar a setImageDrawable () funcionó para mí:

imgView.setImageDrawable(null);

(Como se menciona en el comentario, dicho uso está documentado en los documentos oficiales: ImageView # setImageDrawable ).

Kon
fuente
3
Esto funciona de manera confiable al menos en mi aplicación. setImageResource (0) funciona algunas veces, pero no otras.
Hong
55
Si ha configurado la imagen usando setImageBitmap, esto es lo que desea
Kevin Parker
¡En mi opinión, esta es la mejor respuesta! Es limpio, válido y muy corto. No es necesario definir un dibujo en blanco y aplicarlo o cosas así.
Potaito
¡Esta respuesta realmente funciona de manera confiable! Y es la publicación más temprana que indica este código como una solución. Por lo tanto, voté por esta y no por otras publicaciones con la misma respuesta.
El Android original
2
Esta respuesta está documentada en los documentos oficiales: developer.android.com/reference/android/widget/…
79

Sé que esto es viejo, pero pude lograr esto con

viewToUse.setImageResource(0);

No parece que deba funcionar, pero lo probé por capricho y funcionó perfectamente.

dennis.sheppard
fuente
2
En realidad, establecerlo en CUALQUIER recurso de imagen no válido funciona (-1, 45, etc.)
dvallejo
8
No, establecer en -1 le da android.content.res.Resources $ NotFoundException. 0 parece funcionar.
Nates
28
Este caso, cuando desplaza su vista de lista. de alguna manera, la vista de imagen que lo configuró como 0 mostrará la imagen incorrecta (mostrará la imagen de otra vista de imagen) para que la resolución a continuación pueda hacerlo viewToUse.setImageResource (android.R.color.transparent);
Sruit A.Suk
3
Recibí este error una vez, al intentar este método: "android.content.res.Resources $ NotFoundException: Resource ID # 0x0", por lo que parece que configurar una imagen vacía es la mejor manera de "borrar" el ImageView
Pavel Alexeev
16

Parece que lo que desea es una imagen predeterminada para configurar su ImageView cuando no se muestra una imagen diferente. Así es como lo hace la aplicación Contactos:

if (photoId == 0) {
    viewToUse.setImageResource(R.drawable.ic_contact_list_picture);
} else {
    // ... here is where they set an actual image ...
}
Dan Lew
fuente
67
No, no quiero esto. Solo quiero borrar el contenido. El usuario puede seleccionar una nueva imagen después.
Pentium10
3
La aplicación Contactos es de código abierto ( android.git.kernel.org/?p=platform/packages/apps/… ). Investigué el código fuente. Resulta que están usando un QuickContactBadge (una subclase de ImageView), y cuando no tienen una foto, usan setImageResource para establecer una imagen predeterminada. Consulte com.android.contacts.ContactsListActivity # ContactItemListAdapter para obtener detalles, especialmente en getView ().
Dan Lew
9
¿Por qué marcó esa respuesta como la correcta si no es lo que desea?
arniotaki
3
Daniel Puede haber muchas razones por las cuales la gente quiere que la imagen sea clara.
K - La toxicidad en SO está creciendo.
1
No quiere una imagen predeterminada. Él quiere que se borre.
EpicPandaForce
13

Intenté esto para borrar Image y DrawableCache en ImageView

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

Espero que esto funcione para ti !

nandha
fuente
9

Si ninguna de estas soluciones está borrando una imagen que ya ha configurado (especialmente setImageResource(0)o setImageResources(android.R.color.transparent), verifique que la imagen actual no esté configurada como fondo usandosetBackgroundDrawable(...) o algo similar.

Su código solo establecerá el recurso de imagen en primer plano en algo transparente frente a la imagen de fondo que configuró y aún se mostrará.

Brad Inglés
fuente
6

Oye, sé que llego extremadamente tarde a esta respuesta, pero pensé que debía compartir esto,

El método para llamar cuando restablece la imagen debe ser el mismo método al que llamó mientras lo configuraba.

Cuando desee restablecer la fuente de la imagen @ dennis.sheepard la respuesta funciona bien solo si originalmente está configurando la imagen en el mapa de bits utilizandosetImageResource()

por ejemplo,

Yo había usado setImageBitmap()y, por lo tanto, la configuración setImageResource(0)no funcionó, en su lugar, lo hice setImageBitmap(null).

Ajay
fuente
1
Tienes razón Ajay, observé lo mismo. Usé setImageBitmap () / setImageResource () alternativamente para la misma vista de imagen dependiendo de las condiciones. Por lo tanto, tuve que usar setImageResource (0) / setImageBitmap (null) alternativley para borrar la vista de imagen. ¡Gracias!
Monica M
5

si usas glide puedes hacerlo así.

Glide.with(yourImageView).clear(yourImageView)
Mojtaba Haddadi
fuente
Gracias refig, ayuda mucho.
ucMedia
3

Pude lograr esto definiendo un dibujable (algo como blank_white_shape.xml):

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

Luego, cuando quiero borrar la vista de la imagen, solo llamo

 imageView.setImage(R.drawable.blank_white_shape);

¡Esto funciona muy bien para mí!

kwasi
fuente
2

Para la imagen del elemento ListView puede establecer ImageView.setVisibility(View.INVISIBLE)o ImageView.setImageBitmap(null)en el adaptador de lista para el caso "sin imagen".

Arvis
fuente
2

Como escribió kwasi y editó golu , puede usar transparente, en lugar de blanco:

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

Dentro de una actividad, vista, etc.

view.setImageResource(R.drawable.transparent);
Kit Kat
fuente
1

Esto funciona para mi.

emoji.setBackground(null);

Esto se bloquea en tiempo de ejecución.

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

Para eliminar la imagen en ImageView use:

title_image.setImageResource(-1);

funciona para mí

Tobore Igbe
fuente
0

Si usa la biblioteca de soporte, obtiene en AppCompatImageViewlugar de ImageView, que es compatible setImageResource(0)con todos los dispositivos, por lo que debería estar bien usarlo de la misma manera que usar setImageDrawable(null)ysetImageBitmap(null)

De lo contrario, debería funcionar bien a partir de alguna versión de Android. Según el código de Android y según mis pruebas, creo que debería ser seguro usarlo setImageResource(0)desde la API 22 de Android (5.1). Puedes ver el código de Android de API 22 vs API 21, aquí

desarrollador de Android
fuente
0

Estaba enfrentando el mismo problema, cambié el color de fondo de la vista al color de fondo del diseño que puede hacer así:

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

// luego configura la imagen

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

Traté de eliminar la imagen de ImageView también usando ImageView.setImageRessource(0)pero no funcionó para mí.
Afortunadamente recibí este mensaje en los registros:

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

Entonces, digamos, layoutmanageres su instancia para el diseño, de lo que necesita hacer eso:

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

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

¿Puedo señalar lo que todos están tratando de establecer e int donde se espera un sorteo?

¿No deberías estar haciendo lo siguiente?

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

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