310

I am reusing ImageViews for my displays, but at some point I don't have values to put it.

So how to clear an ImageView in Android?

I've tried:

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

None of them have cleared the view, it still shows previous image.

6
  • 1
    i suggest to load the default image when you have no value. Commented May 18, 2010 at 16:53
  • 3
    I have no default image, just a background. I need to have just the background. Commented May 18, 2010 at 16:54
  • I think accepted answer needs to be changed here. Is there any provision on stackoverflow to change/move accepted answer to actual answer(or more better answer) from a 'workaround' answer? Because lot of users(like me) can go for accepted rather than better answer Commented Dec 9, 2015 at 17:56
  • 1
    @ShirishHerwade ok changed Commented Dec 10, 2015 at 7:19
  • I was facing the same issue i do it like this: stackoverflow.com/a/50448536/5697474 Commented May 21, 2018 at 12:09

19 Answers 19

613

I used to do it with the dennis.sheppard solution:

viewToUse.setImageResource(0); 

it works but it is not documented so it isn't really clear if it effects something else in the view (you can check the ImageView code if you like, i didn't).

I think the best solution is:

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

I like this solution the most cause there isn't anything tricky in reverting the state and it's also clear what it is doing.

Sign up to request clarification or add additional context in comments.

15 Comments

I think using setImageResource with a color identifier will give you crashing issues on Android 2.2.1
for me works the viewToUse.setImageResource(android.R.color.transparent); code
beware of this, if you actually have a resource with an id of 0 this will infact set that drawable as yourmage view. Not sure what the chances are of having that as an id though..
I had problems with the setImageResource(0)--didn't always work. But setting it to transparent is very reliable. Thanks!
viewToUse.setImageResource(0); does not worked,but the viewToUse.setImageResource(android.R.color.transparent); worked.
|
147

I had a similar problem, where I needed to basically remove ImageViews from the screen completely. Some of the answers here led me in the right direction, but ultimately calling setImageDrawable() worked for me:

imgView.setImageDrawable(null); 

(As mentioned in the comment, such usage is documented in the official docs: ImageView#setImageDrawable.)

6 Comments

This works reliably at least in my app. setImageResource(0) works sometimes, but not others.
If you've set the image using setImageBitmap this is what you want
This is in my opinion the best answer! It's clean, valid and very short. No need to define a blank drawable and apply it or stuff like that.
This answer actually works reliably! And it is the earliest post stating this code as a solution. Hence I upvoted this one and not other posts with the same answer.
This answer is actually documented on the official docs: developer.android.com/reference/android/widget/…
|
77

I know this is old, but I was able to accomplish this with

viewToUse.setImageResource(0); 

Doesn't seem like it should work, but I tried it on a whim, and it worked perfectly.

4 Comments

Actually, setting it to ANY invalid image resource works (-1, 45, etc)
No, setting to -1 gives you android.content.res.Resources$NotFoundException. 0 seems to work.
This case, when you scrolling your listview. somehow the imageview that set it as 0 will show the wrong image (it will show image from another imageview) so the resolution below can do it viewToUse.setImageResource(android.R.color.transparent);
I got this error once, when trying this method: "android.content.res.Resources$NotFoundException: Resource ID #0x0", so it seems that setting an empty image is the best way to "clear" the ImageView
15

It sounds like what you want is a default image to set your ImageView to when it's not displaying a different image. This is how the Contacts application does it:

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

7 Comments

No, I don't want this. I want just to clear the contents. The user may select new image after.
The Contacts app is open source (android.git.kernel.org/?p=platform/packages/apps/…). I investigated the source code. It turns out that they are using a QuickContactBadge (a subclass of ImageView), and when they don't have a photo, they use setImageResource to set a default image. Check com.android.contacts.ContactsListActivity#ContactItemListAdapter for the details, especially in getView().
Why did you checked that answer as the right one if it is not what you want?
Daniel There may be many reasons as to why people want the image clear.
He does not want a default image. He wants it to be cleared.
|
15

I tried this for to clear Image and DrawableCache in ImageView

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

I hope this works for you !

Comments

12

If none of these solutions are clearing an image you've already set (especially setImageResource(0) or setImageResources(android.R.color.transparent), check to make sure the current image isn't set as background using setBackgroundDrawable(...) or something similar.

Your code will just set the image resource in the foreground to something transparent in front of that background image you've set and will still show.

Comments

12

if you use glide you can do it like this.

Glide.with(yourImageView).clear(yourImageView) 

2 Comments

I think the first yourImageView should be context
No difference, glide gets context from the imageView
6

Hey i know i am extremely late to this answer, but just thought i must share this,

The method to call when u reset the image must be the same method that u called while u were setting it.

When u want to reset the image source @dennis.sheepard answer works fine only if u are originally setting the image in the bitmap using setImageResource()

for instance,

i had used setImageBitmap() and hence setting setImageResource(0) didn work, instead i used setImageBitmap(null).

1 Comment

You are right Ajay,I observed the same. I used setImageBitmap()/setImageResource() alternatively for same imageview depending on the conditions. Hence I had to use setImageResource(0)/setImageBitmap(null) alternativley to clear the imageview. Thanks!
3

I was able to achieve this by defining a drawable (something like blank_white_shape.xml):

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

Then when I want to clear the image view I just call

 imageView.setImage(R.drawable.blank_white_shape); 

This works beautifully for me!

Comments

3

This works for me.

emoji.setBackground(null); 

This crashes in runtime.

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

Comments

2

For ListView item image you can set ImageView.setVisibility(View.INVISIBLE) or ImageView.setImageBitmap(null) in list adapter for "no image" case.

Comments

2

As kwasi wrote and golu edited, you can use transparent, instead of white:

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

Inside an activity, view, etc:

view.setImageResource(R.drawable.transparent); 

Comments

1

If you use the support library, you get AppCompatImageView instead of ImageView , which supports setImageResource(0) on all devices, so you should be fine with using it the same way as using setImageDrawable(null) and setImageBitmap(null)

Otherwise, it should work fine starting from some Android version. According to the code of Android and according to my tests, I think it should be safe to use setImageResource(0) from Android API 22 (5.1). You can see the Android code of API 22 vs API 21, here

Comments

0

To remove the image in ImageView use:

title_image.setImageResource(-1);

it works for me

Comments

0

I was facing same issue i changed background color of view to layout background color u can do like this:

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

//then set the image

edit_countflag.setImageResource(R.drawable.flag_id); 

Comments

0

I tried to remove the Image of the ImageView too by using ImageView.setImageRessource(0) but it didn't work for me.
Luckily I got this message in the logs:

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

So let's say, layoutmanager is your instance for the layout, than you need to do that:

RelativeLayout layoutManager = new RelativeLayout(this); ImageView image = new ImageView(this); // this line worked for me layoutManager.removeView(image); 

Comments

0

I tried and they all work (one in 3 cases):

imageView.setImageResource(0); imageView.setImageResource(android.R.color.transparent); imageView.setImageBitmap(null); 

Or you can hide it:

imageView.setVisibility(View.GONE); 

Comments

-1

Can i just point out what you are all trying to set and int where its expecting a drawable.

should you not be doing the following?

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

Comments

-2

editText.setText("");

imageView.setImageResource(0);

Comments

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.