我在显示器上重用ImageView,但是在某些时候我没有值可放。
那么如何在Android中清除ImageView?
我试过了:
1 2
| mPhotoView.invalidate();
mPhotoView.setImageBitmap(null); |
他们都没有清除视图,它仍然显示以前的图像。
-
我建议您在没有价值时加载默认图像。
-
我没有默认图像,只有背景。 我只需要有背景。
-
我认为接受的答案需要在这里进行更改。 是否有关于Stackoverflow的任何规定,以从变通办法答案中更改/移动已接受的答案到实际答案(或更佳的答案)? 因为很多用户(例如我)可以接受而不是更好的答案
-
@ShirishHerwade确定已更改
-
我面临着同样的问题,我这样做是这样的:stackoverflow.com/a/50448536/5697474
-
我将创建一个默认的图像资源,并在一个if语句下(假定该图像首先放置在其中)下,我将在else子句下编写以下内容:imageView.setImageResource(R.drawable.default_resource。 jpg);
我曾经使用dennis.sheppard解决方案来做到这一点:
1
| viewToUse.setImageResource(0); |
它可以工作,但没有记录,因此尚不清楚它是否会影响视图中的其他内容(如果您愿意,可以查看ImageView代码,我没有)。
我认为最好的解决方案是:
1
| viewToUse.setImageResource(android.R.color.transparent); |
我最喜欢这种解决方案,因为恢复状态没有任何棘手的事情,而且也很清楚它在做什么。
-
我认为将setImageResource与颜色标识符一起使用会给您带来Android 2.2.1崩溃的问题
-
那是可能的。我没有设备对其进行测试。你测试了吗?万一写在这里,我会编辑答案(和我的代码:))。我在具有2.1-update1的xperia U20i上对其进行了测试,并按预期工作。
-
对我来说,viewToUse.setImageResource(android.R.color.transparent);码
-
如果您设置了drawable而不是uri或资源,则此方法将无效
-
您在谈论第一个解决方案吗?可以,但是我确信第二种解决方案在每种情况下都有效
-
提防这一点,如果您实际上有一个ID为0的资源,则会将可绘制的集作为您的视图实际使用。虽然不确定将其作为ID的机会。
-
我在setImageResource(0)时遇到问题-始终工作。但是将其设置为透明是非常可靠的。谢谢!
-
viewToUse.setImageResource(0);不起作用,但viewToUse.setImageResource(android.R.color.transparent);起作用。
-
如果您要清除背景图像而不是src,请使用viewToUse.setBackgroundResource(android.R.color.transparent);
-
是的,请不要使用0技巧-有时Android会寻找ID为0的资源,然后将其炸毁。奇怪的是,这是随机行为-很难发现。
-
设置透明背景可能会导致透支问题。 甚至透明像素也被渲染
-
ListView内没有为我工作的东西尝试image.setImageBitmap(null);
-
关于viewToUse.setImageResource(0),这仅在使用支持库(自动为您提供AppCompatImageView而不是ImageView),或者您使用的是Android 5.1(API 22)及更高版本时才有效。 我在这里写过:stackoverflow.com/a/50100342/878126
-
viewToUse.setImageResource(0)在Kitkat上不起作用,但在更高的android版本上起作用
我有一个类似的问题,我需要从屏幕上完全删除ImageViews。这里的一些答案将我引向正确的方向,但最终调用setImageDrawable()对我有用:
1
| imgView.setImageDrawable(null); |
(如评论中所述,这种用法记录在官方文档:ImageView#setImageDrawable中。)
-
这至少在我的应用程序中可靠地工作。 setImageResource(0)有时可以工作,但其他情况不能工作。
-
如果您使用setImageBitmap设置了图像,这就是您想要的
-
我认为这是最好的答案!它干净,有效且很短。无需定义空白可绘制对象并应用它或类似的东西。
-
这个答案实际上是可靠的!这是最早将这种代码作为解决方案的文章。因此,我投票给这一职位,而不是其他具有相同答案的职位。
-
这对我在Android M上不起作用。我必须将"视图"设置为"不可见"。
-
这个答案实际上记录在官方文档中:developer.android.com/reference/android/widget/
我知道这很老了,但是我能够做到
1
| viewToUse.setImageResource(0); |
似乎不应该工作,但是我一时兴起尝试了一下,并且效果很好。
-
实际上,将其设置为ANY无效的图像资源有效(-1、45等)
-
不,设置为-1可为您提供android.content.res.Resources $ NotFoundException。 0似乎有效。
-
这种情况下,当您滚动列表视图时。以某种方式将其设置为0的imageview将显示错误的图像(它将显示另一个imageview的图像),因此下面的分辨率可以做到这一点viewToUse.setImageResource(android.R.color.transparent);
-
尝试此方法时,我一次收到此错误:" android.content.res.Resources $ NotFoundException:资源ID#0x0",因此似乎设置空图像是"清除" ImageView的最佳方法
听起来好像您想要的是默认图像,以便在不显示其他图像时将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 ...
} |
-
不,我不要这个。我只想清除内容。用户可以在之后选择新图像。
-
那我不明白。您不希望显示任何图像,但是当没有图像显示时,您没有默认图像可显示给用户。您确实希望向用户显示某些内容。您甚至可以将背景设置为图像资源。
-
如果您熟悉通讯录,则有一个联系卡背景框架替换器,我已在代码中添加了它。 这是照片的简单灰色背景。
-
Contacts应用程序是开源的(android.git.kernel.org/?p=platform/packages/apps/)。我研究了源代码。原来,他们使用的是QuickContactBadge(ImageView的子类),当他们没有照片时,可以使用setImageResource设置默认图像。检查com.android.contacts.ContactsListActivity#ContactItemListAdapter的详细信息,尤其是在getView()中。
-
如果不是您想要的答案,为什么还要检查该答案是否正确?
-
Daniel人们为什么想要清晰的图像可能有很多原因。
-
他不需要默认图像。他希望将其清除。
我试图这样做以清除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)。
-
你说得对,阿杰,我也观察到同样的情况。 我根据条件将setImageBitmap()/ setImageResource()用于相同的imageview。 因此,我不得不使用setImageResource(0)/ setImageBitmap(null)alternativley来清除imageview。 谢谢!
我可以通过定义一个可绘制对象(例如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)); |