2010-05-18 45 views
196

我正在为我的显示器重复使用ImageView,但在某些时候我没有价值。如何清除Android中的ImageView?

那么如何清除Android中的ImageView

我已经试过:

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

他们都没有被清除的观点,它仍然显示一个图像。

+1

我建议,当你有没有价值加载默认的图像。 – Praveen 2010-05-18 16:53:38

+3

我没有默认图像,只是背景。我需要有背景。 – Pentium10 2010-05-18 16:54:58

+0

我认为接受的答案需要在这里改变。是否有任何规定在stackoverflow更改/移动被接受的答案实际答案(或更好的答案)从一个'解决方法'的答案?因为很多用户(如我)可以去接受而不是更好的回答 – 2015-12-09 17:56:01

回答

414

我用的dennis.sheppard解决方案做到这一点:

viewToUse.setImageResource(0); 

它的工作原理,但它没有被记录,因此它不能确定它是否会影响视图中的其他内容(如果你喜欢,你可以检查ImageView code)。

我认为最好的办法是:

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

我喜欢这个解决方案最值得有没有什么在恢复状态棘手,它也清楚它在做什么。

+3

我认为使用带有颜色标识符的setImageResource会给你在Android 2.2.1 – Blundell 2012-08-15 08:13:42

+0

这是可能的崩溃的问题。 我没有设备来测试它。你测试过了吗? 如果写在这里,我会编辑答案(和我的代码:))。 我使用2.1-update1在xperia U20i上测试它,并按预期工作。对我来说 – 2012-09-19 17:39:56

+2

的作品viewToUse.setImageResource(android.R.color.transparent);代码 – Javier 2013-01-09 17:20:33

17

这听起来像你想要的是一个默认图像来设置你的ImageView,当它不显示不同的图像。这是联系人应用程序是如何做的:

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

不,我不想要这个。我只想清除内容。用户可以在之后选择新的图像。 – Pentium10 2010-05-18 17:08:27

+0

我不明白。您不希望显示任何图像,但是当没有图像显示时,您没有默认图像向用户显示。你要么*要*显示用户或不是。你甚至可以将背景设置为图像资源。 – 2010-05-18 17:11:39

+0

如果你对联系人很熟悉,有一个联系人卡片背景帧替换器,我在我的代码中有。 ''这是一张简单的灰色背景照片。 – Pentium10 2010-05-18 17:22:48

-3

尝试mPhotoView.setAlpha(0),使图像完全透明(255恢复)。

+7

这样图像资源仍然存在,不会被垃圾收集。它需要完全删除gc来捡起来。 – 2012-06-15 13:31:19

77

我知道这是旧的,但我可以用

viewToUse.setImageResource(0); 

做到这一点似乎并不像它应该工作,但是我想它一时兴起,它完美地工作。

+2

实际上,将其设置为任何无效的图像资源(-1,45等) – dvallejo 2011-03-01 18:01:02

+7

不,设置为-1会给你android.content.res.Resources $ NotFoundException。 0似乎工作。 – NateS 2011-04-10 07:10:45

+28

这种情况下,当你滚动你的列表视图。不知何故将其设置为0的imageview将显示错误的图像(它会显示来自另一个图像视图的图像) 所以下面的分辨率可以做到这一点 viewToUse.setImageResource(android.R.color.transparent); – 2012-07-15 13:31:13

3

我能够通过定义绘制(类似blank_white_shape.xml)来实现这一目标:

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

然后,当我想清楚的图像视图我只是叫

imageView.setImage(R.drawable.blank_white_shape); 

这对我来说很漂亮!

85

我有一个类似的问题,我需要基本上从屏幕上完全删除ImageViews。一些问题的答案在这里使我在正确的方向,但最终调用setImageDrawable()为我工作:

imgView.setImageDrawable(null); 
+3

这是可行的至少在我的应用程序中可靠。 setImageResource(0)有时起作用,但不起作用。 – Hong 2013-04-03 12:50:32

+4

如果你已经使用setImageBitmap设置图像,这是你想要的 – 2013-05-15 17:43:28

+0

这在我看来是最好的答案!它很干净,有效并且很短。不需要定义一个空白drawable并应用它或类似的东西。 – Cat 2015-03-10 18:15:47

-1

我可以指出你想要设置什么吗?

你应该不是在做以下事情?

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

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

对于ListView项的图像可以为“无图像”的情况下设置ImageView.setVisibility(View.INVISIBLE)ImageView.setImageBitmap(null)列表适配器。

5

嘿,我知道我是极晚于这个答案,只是想我必须共享此,

的方法,当u重置图像必须是ü而ü被设置叫同样的方法调用。

当U想重置图像源@ dennis.sheepard答案工作正常,只是如果u使用setImageResource()

例如原本设置在该位图图像,

我用了setImageBitmap()和因此设置setImageResource(0)没有工作,而是我用setImageBitmap(null)

+1

你是对的Ajay,我观察到相同的。根据条件,我使用setImageBitmap()/ setImageResource()替代相同的图像视图。因此,我不得不使用setImageResource(0)/ setImageBitmap(null)替代清除imageview。谢谢! – 2014-03-20 11:16:05

9

我的ImageView

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

尝试本作以清晰的图像和DrawableCache我希望这对你的作品!

1

由于kwasi写和golu编辑,你可以用透明的,而不是白色:

文件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> 

活动,查看等内部:

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

这是Genius! – 2015-07-09 01:07:43

9

如果没有这些解决方案正在清除您已设置的图像(尤其是setImageResource(0)setImageResources(android.R.color.transparent),请使用setBackgroundDrawable(...)或类似的东西检查以确保当前图像未设置为背景。

您的代码只会将前景中的图像资源设置为在您设置的背景图像前透明的东西,并且仍然会显示。

0

要删除的图像ImageView的使用:

title_image.setImageResource(-1);

它为我工作