如何在Android中清除ImageView?

How to clear an ImageView in Android?

我在显示器上重用ImageView,但是在某些时候我没有值可放。

那么如何在Android中清除ImageView

我试过了:

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

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


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

1
viewToUse.setImageResource(0);

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

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

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

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


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

1
imgView.setImageDrawable(null);

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


我知道这很老了,但是我能够做到

1
viewToUse.setImageResource(0);

似乎不应该工作,但是我一时兴起尝试了一下,并且效果很好。


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

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


我试图这样做以清除ImageView中的Image和DrawableCache

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

希望这对您有用!


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

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


嘿,我知道我对这个答案太迟了,但是以为我必须分享这个答案,

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

当您想重置图像源@ dennis.sheepard时,答案仅在您最初使用setImageResource()在位图中设置图像时有效

例如,

我使用了setImageBitmap(),因此设置setImageResource(0)无效,而是使用了setImageBitmap(null)


我可以通过定义一个可绘制对象(例如blank_white_shape.xml之类)来实现此目的:

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

然后,当我想清除图像视图时,我只是调用

1
 imageView.setImage(R.drawable.blank_white_shape);

这对我来说效果很好!


如果使用滑行,您可以这样做。

1
Glide.with(yourImageView).clear(yourImageView)


正如kwasi所写和golu编辑的那样,您可以使用透明而不是白色:

文件drawable/transparent.xml

1
2
3
4
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
    <solid android:color="@android:color/transparent"/>
</shape>

在活动,视图等内部:

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

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


这对我有用。

1
emoji.setBackground(null);

这在运行时崩溃。

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

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

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

假设layoutmanager是您的版式实例,而不是您需要这样做的实例:

1
2
3
4
5
RelativeLayout layoutManager = new RelativeLayout(this);
ImageView image = new ImageView(this);

// this line worked for me
layoutManager.removeView(image);

要在ImageView中删除图像,请使用:
title_image.setImageResource(-1);
这个对我有用


如果使用支持库,则会得到AppCompatImageView而不是ImageView,该库在所有设备上都支持setImageResource(0),因此使用它与使用setImageDrawable(null)setImageBitmap(null)相同的方式应该没问题。

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


我面临着同样的问题,我将视图的背景色更改为布局背景色,您可以这样做:

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

//然后设置图片

1
edit_countflag.setImageResource(R.drawable.flag_id);

我能指出一下您都在尝试设置什么吗?

您不应该执行以下操作吗?

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

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