从ImageView中移除图片 Android

139

我正在尝试制作一个包含图库的ImageView。通过触摸,用户请求加载下一张图片。如果下一张图片在服务器上找不到或需要时间加载,我需要旧图片为空。

setVisibility(View.GONE)setVisibility(View.INVISIBLE) 对我无效,因为当视图不可见/隐藏时,onTouch() 也会停止检测(用户被锁定在当前图片上)。

如何使ImageView加载一个空位图或清除(删除)当前位图?


ImageView.setImageResource(android.R.color.transparent); 来自 https://dev59.com/7nE85IYBdhLWcg3wRBRU - Shirish Herwade
1
请选择正确的答案。 - user25
请标记帮助过您的答案,这有助于其他人。 - Akshatha S R
4个回答

457

我总是使用

imageView.setImageDrawable(null);

35
应标记为正确答案。 - Mahmoud Badri
1
奇怪!它不起作用。实际上,setImageResource(0)和setBackground(null)也不起作用。有什么想法是什么原因或任何技巧来清除缓存或其他东西吗? - RamKr
1
如果尝试清除imageView中未加载的图像,则程序会意外停止。有没有解决这个问题的方法? - Krithi07
@Krithi07 在清除图片资源之前,请检查它是否存在。 - Ahmad Reza Enshaee
把这个设为正确答案。非常好用! - Femn Dharamshi
显示剩余3条评论

16

试试这个:

imageView.setImageResource(0);

这将设置图像视图不使用任何资源。


1
对我没用 =( 在调用imageView.setImageResource(0)之后,它仍然显示旧图片。 - ChyBy
嗯,有趣。嗯,这在过去对我起作用了。 - Ribose
22
谢谢,最终view.setImageDrawable(null)实现了我的想法。 - ChyBy
如果您使用支持库,则可以获得AppCompatImageView而不是ImageView,它支持在所有设备上使用setImageResource(0) - android developer

15

据我观察,清除图像时某些方法是否“有效”取决于用于填充ImageView的方法。

因此,如果您使用 img.setImageBitmap(bmp) 来设置图像,则要清除图像,应使用 img.setImageBitmap(null)。 当您使用 img.setImageResource(resId) 来设置图像时,则要清除图像,应使用 img.setImageResouce(0)。 等等。


6
当然,imageView.setImageResource(0)是有效的。我已经使用了很多次,从未失败过。
通常,setImageResource会传递R.drawable的引用(图片的引用),该引用存储为int,在R.java类中以十六进制值0xf2fs...显示。因此,如果假定该引用存在,则会显示一张图片;如果稍后向同一imageview传递一个不存在的引用,则旧图片将不再显示。因此,如果您将0、5或与R.java类中引用的资源不匹配的int传递给它,则会完全从imageView的src中删除图片。因此,如果您将0传递给imageView的旧引用,则会将其删除。

2
在我的三星S5上运行Android 4.4.2系统时,imageView.setImageResource(0)并没有起作用。然而,imageView.setImageDrawable(null);却可以正常工作。 - rlay3
如果您使用支持库,则可以获得AppCompatImageView而不是ImageView,它支持在所有设备上使用setImageResource(0) - android developer

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接