如何在Android中清除ImageView?

Pen*_*m10 256 resources android clear android-image android-imageview

我正在重复使用ImageViews来显示我的显示器,但是在某些时候我没有值得把它放进去.

那么如何ImageView在Android中清除?

我试过了:

mPhotoView.invalidate();
mPhotoView.setImageBitmap(null);
Run Code Online (Sandbox Code Playgroud)

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

Mar*_*nci 511

我过去常常使用dennis.sheppard解决方案:

viewToUse.setImageResource(0);
Run Code Online (Sandbox Code Playgroud)

它的工作原理但它没有被记录,所以如果它在视图中影响了其他东西,它是不是真的很清楚(你可以检查ImageView代码,如果你喜欢,我没有).

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

viewToUse.setImageResource(android.R.color.transparent);
Run Code Online (Sandbox Code Playgroud)

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

  • `viewToUse.setImageResource(0);`不起作用,但是`viewToUse.setImageResource(android.R.color.transparent);`工作. (6认同)
  • 我认为使用带有颜色标识符的setImageResource可以解决Android 2.2.1上的崩溃问题 (3认同)
  • 要注意这一点,如果你实际上有一个id为0的资源,这将把你的drawable设置为你的图像视图.不知道有什么机会可以作为一个id虽然.. (3认同)
  • 为我工作viewToUse.setImageResource(android.R.color.transparent); 码 (2认同)

Kon*_*Kon 114

我遇到了类似的问题,我需要完全从屏幕上删除ImageViews.这里的一些答案让我朝着正确的方向前进,但最终调用setImageDrawable()为我工作:

imgView.setImageDrawable(null);
Run Code Online (Sandbox Code Playgroud)

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

  • 如果您使用setImageBitmap设置图像,这就是您想要的 (5认同)
  • 这至少在我的应用程序中可靠地工作.setImageResource(0)有时会工作,但不会工作. (3认同)
  • 这个答案实际上记录在官方文档中:https://developer.android.com/reference/android/widget/ImageView.html#setImageDrawable(android.graphics.drawable.Drawable) (2认同)

den*_*ard 79

我知道这已经过时了,但我能够做到这一点

viewToUse.setImageResource(0);
Run Code Online (Sandbox Code Playgroud)

似乎它不应该工作,但我一时兴起尝试,它完美地工作.

  • 这种情况,当您滚动列表视图时.不知何故,将其设置为0的imageview将显示错误的图像(它将显示来自另一个imageview的图像),因此下面的分辨率可以执行viewToUse.setImageResource(android.R.color.transparent); (28认同)
  • 不,设置为-1会给你android.content.res.Resources $ NotFoundException.0似乎工作. (8认同)
  • 我在尝试这个方法时遇到了这个错误:"android.content.res.Resources $ NotFoundException:Resource ID#0x0",所以设置一个空图像似乎是"清除"ImageView的最佳方法 (3认同)
  • 实际上,将其设置为任何无效的图像资源(-1,45等) (2认同)

Dan*_*Lew 16

听起来你想要的是一个默认图像,将ImageView设置为不显示不同的图像.这是Contacts应用程序的功能:

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

  • 不,我不想要这个.我只想清除内容.用户可以在之后选择新图像. (67认同)
  • 如果不是你想要的,你为什么选择那个答案作为正确答案? (9认同)
  • Contacts应用程序是开源的(http://android.git.kernel.org/?p=platform/packages/apps/Contacts.git;a=tree).我调查了源代码.事实证明他们正在使用QuickContactBadge(ImageView的子类),当他们没有照片时,他们使用setImageResource来设置默认图像.检查com.android.contacts.ContactsListActivity#ContactItemListAdapter以获取详细信息,尤其是在getView()中. (3认同)
  • Daniel为什么人们希望图像清晰可能有很多原因. (3认同)

nan*_*dha 12

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

ImgView.setImageBitmap(null);
ImgView.destroyDrawingCache();
Run Code Online (Sandbox Code Playgroud)

我希望这对你有用!


Bra*_*ish 9

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

您的代码只会将前景中的图像资源设置为您已设置并仍将显示的背景图像前面的透明内容.


Moj*_*adi 7

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

Glide.with(yourImageView).clear(yourImageView)
Run Code Online (Sandbox Code Playgroud)


Aja*_*jay 5

嘿,我知道我对这个答案非常迟,但只是认为我必须分享这个,

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

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

例如,

我用过setImageBitmap(),因此设置setImageResource(0)没有工作,而是我用过setImageBitmap(null).