298

我正在ImageView为我的显示器重用 s,但在某些时候我没有价值来表达它。

那么如何ImageView在Android中清除一个?

我试过了:

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

他们都没有清除视图,它仍然显示以前的图像。

4

18 回答 18

586

我曾经使用dennis.sheppard解决方案来做到这一点:

viewToUse.setImageResource(0);

它有效,但没有记录,因此不清楚它是否会影响视图中的其他内容(如果您愿意,可以检查ImageView 代码,我没有)。

我认为最好的解决方案是:

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

我最喜欢这个解决方案,因为恢复状态没有什么棘手的问题,而且它在做什么也很清楚。

于 2011-11-23T13:42:35.767 回答
134

我有一个类似的问题,我需要从屏幕上完全删除 ImageViews。这里的一些答案使我朝着正确的方向前进,但最终调用 setImageDrawable() 对我有用:

imgView.setImageDrawable(null);

(如评论中所述,官方文档中记录了这种用法:ImageView#setImageDrawable。)

于 2011-04-09T16:36:47.173 回答
78

我知道这是旧的,但我能够做到这一点

viewToUse.setImageResource(0);

似乎它不应该工作,但我一时兴起尝试了它,它工作得很好。

于 2010-11-01T16:36:24.343 回答
15

听起来您想要的是默认图像,以便在 ImageView 不显示其他图像时将其设置为。联系人应用程序是这样操作的:

if (photoId == 0) {
    viewToUse.setImageResource(R.drawable.ic_contact_list_picture);
} else {
    // ... here is where they set an actual image ...
}
于 2010-05-18T17:05:58.553 回答
15

我试过这个来清除 ImageView 中的 Image 和 DrawableCache

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

我希望这对你有用!

于 2013-09-13T05:07:38.470 回答
12

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

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

于 2014-06-01T09:02:16.600 回答
11

如果你使用 glide 你可以这样做。

Glide.with(yourImageView).clear(yourImageView)
于 2019-12-08T06:30:26.537 回答
6

嘿,我知道我这个答案非常晚,但我只是想我必须分享这个,

重置图像时调用的方法必须与设置图像时调用的方法相同。

当你想重置图像源@dennis.sheepard答案只有在你最初使用位图中设置图像时才能正常工作setImageResource()

例如,

我曾经使用过setImageBitmap(),因此设置setImageResource(0)不起作用,而是我使用了setImageBitmap(null).

于 2013-01-31T11:10:54.663 回答
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);

这对我来说很有效!

于 2011-02-11T20:18:26.477 回答
2

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

于 2013-01-18T17:01:49.427 回答
2

正如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);
于 2013-10-06T17:34:20.440 回答
2

这对我有用。

emoji.setBackground(null);

这在运行时崩溃。

viewToUse.setImageResource(android.R.color.transparent);  
于 2019-02-18T20:42:33.947 回答
0

要删除 ImageView 中的图像,请使用:

title_image.setImageResource(-1);

它适用于我

于 2016-02-26T11:06:39.013 回答
0

如果你使用支持库,你会得到AppCompatImageView而不是ImageView,它在所有设备上都支持,所以你应该可以像使用andsetImageResource(0)一样使用它setImageDrawable(null)setImageBitmap(null)

否则,从某些 Android 版本开始,它应该可以正常工作。根据Android的代码和我的测试,我认为setImageResource(0)从Android API 22(5.1)开始使用应该是安全的。您可以在此处查看API 22 与 API 21 的 Android 代码

于 2018-04-30T12:14:57.723 回答
0

我遇到了同样的问题,我将视图的背景颜色更改为布局背景颜色,您可以这样做:

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

//然后设置图像

edit_countflag.setImageResource(R.drawable.flag_id);
于 2018-05-21T12:15:10.113 回答
0

我也尝试通过使用删除 ImageView 的图像,ImageView.setImageRessource(0)但它对我不起作用。
幸运的是,我在日志中收到了这条消息:

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

因此,假设layoutmanager是您的布局实例,而不是您需要这样做:

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

// this line worked for me
layoutManager.removeView(image);
于 2019-12-20T14:15:47.467 回答
-1

我可以指出你们都在尝试设置什么,并指出它期望可绘制的位置。

你不应该做以下事情吗?

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

imageview.setImageDrawable(getApplicationContext().getResources().getDrawable(R.drawable.icon_profile_image));
于 2012-04-12T10:46:22.120 回答
-2

editText.setText("");

imageView.setImageResource(0);

于 2021-04-04T08:46:50.047 回答