如何清除一个ImageView在Android?

我正在为我的显示重用ImageViews,但在某些时候,我没有值来放置它。

那么如何在Android中清除ImageView呢?

我试过了:

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

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

258456 次浏览

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

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

我知道这很旧了,但我能用

viewToUse.setImageResource(0);

看起来不应该有用,但我一时兴起试了一下,效果很好。

我可以通过定义一个可绘制的(类似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);

这对我来说非常有用!

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

imgView.setImageDrawable(null);

(正如评论中提到的,这种用法在官方文档中有记录:ImageView # setImageDrawable。)

我以前用dennis.sheppard解决方案来做:

viewToUse.setImageResource(0);

它可以工作,但它没有被记录,所以它并不清楚它是否会影响视图中的其他东西(如果你喜欢,你可以检查ImageView代码,我没有)。

我认为最好的解决办法是:

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

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

我能指出你都试图设置和int它期望一个可绘制。

你不应该做以下事情吗?

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


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

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

嘿,我知道我回答这个问题已经很晚了,但我想我必须分享这个,

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

当你想重置图片来源@dennis.sheepard答案工作良好,只有当你最初在位图中使用setImageResource()设置图像

例如,

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

我试图清除ImageView中的Image和DrawableCache

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

我希望这对你有用!

由于夸西编写和编辑,您可以使用透明,而不是白色:

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

如果这些解决方案都没有清除你已经设置的图像(特别是setImageResource(0)setImageResources(android.R.color.transparent),检查确保当前图像没有使用setBackgroundDrawable(...)或类似的方法设置为背景。

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

在ImageView中删除图像使用:

title_image.setImageResource(-1); < br > < br > 它为我工作

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

否则,从某些Android版本开始,它应该可以正常工作。根据Android的代码和根据我的测试,我认为从Android API 22(5.1)使用setImageResource(0)应该是安全的。你可以看到API 22和API 21的Android代码,这里<强> < / >强

我也遇到了同样的问题,我把视图的背景色改为布局背景色,你可以这样做:

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

//然后设置图像

edit_countflag.setImageResource(R.drawable.flag_id);

这对我很有用。

emoji.setBackground(null);

这会在运行时崩溃。

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

如果你使用滑翔,你可以这样做。

Glide.with(yourImageView).clear(yourImageView)
我试图通过使用ImageView.setImageRessource(0)来删除ImageView的图像,但它对我不起作用。< br > 幸运的是,我在日志中得到了这条消息:

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);

editText.setText(“;”);

imageView.setImageResource (0);