AndroidでImageViewをクリアする方法は?


277

ImageViewディスプレイにsを再利用していますが、ある時点でそれを配置する値がありません。

ではImageView、Androidでをクリアする方法は?

私はもう試した:

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

それらのどれもビューをクリアしていません、それはまだ前の画像を示しています。


1
値がない場合は、デフォルトのイメージをロードすることをお勧めします。
Praveen

3
デフォルトの画像はなく、背景のみです。背景だけが必要です。
Pentium10 2010年

受け入れられた答えはここで変更する必要があると思います。Stackoverflowには、「回避策」の回答から実際の回答(またはより適切な回答)に変更/移動するための規定はありますか?多くのユーザー(私のような)は、より良い答えではなく、受け入れられる可能性があるため
Shirish Herwade

1
@ShirishHerwade ok変更
Pentium10

私は次のように同じ問題に直面していました:stackoverflow.com/a/50448536/5697474
Syed Danish Haider

回答:


540

以前dennis.sheppardソリューションでそれをしていました:

viewToUse.setImageResource(0);

それは機能しますが、文書化されていないため、ビューの他の何かに影響を与えるかどうかは明確ではありません(必要に応じてImageViewコードを確認できます)。

私は最良の解決策は次のとおりだと思います:

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

私がこのソリューションを気に入っているのは、状態を元に戻すのに難しいことは何もないことと、それが何をしているかがはっきりしていることです。


3
私は、setImageResourceをカラー識別子とともに使用すると、Android 2.2.1でクラッシュする問題が発生すると思います
Blundell

2
私にとっては、viewToUse.setImageResource(android.R.color.transparent); コード
Javier

3
これに注意してください。IDが0のリソースが実際にある場合、これは、mageビューとして描画可能なそのセットに影響を与えます。それをidとして持っている可能性が何であるかはわかりませんが..
Chris

1
setImageResource(0)で問題が発生しました-常に機能するとは限りませんでした。しかし、それを透明に設定することは非常に信頼できます。ありがとう!
スコットビッグス2014

6
viewToUse.setImageResource(0);動作しませんが、動作しviewToUse.setImageResource(android.R.color.transparent);ました。
zionpi

119

同様の問題があり、画面からImageViewsを完全に削除する必要がありました。ここでの回答のいくつかは正しい方向に導いてくれましたが、最終的にsetImageDrawable()を呼び出すとうまくいきました:

imgView.setImageDrawable(null);

(コメントで述べたように、そのような使用法は公式のドキュメントで説明されています:ImageView#setImageDrawable


3
これは少なくとも私のアプリでは確実に機能します。setImageResource(0)はときどき機能しますが、それ以外は機能しません。
香港、

5
setImageBitmapを使用して画像を設定した場合、これが必要です
Kevin Parker

これは私の意見では最良の答えです!クリーンで、有効で、非常に短いです。空のドローアブルを定義して適用する必要はありません。
Potaito 2015年

この答えは実際に確実に機能します!そして、それはこのコードを解決策として述べた最も早い投稿です。したがって、私はこれに賛成し、同じ答えを持つ他の投稿には賛成しませんでした。
オリジナルAndroid

2
この答えは、実際に公式ドキュメントに文書化されています。developer.android.com/reference/android/widget/...

79

これは古いことを知っていますが、これで達成できました

viewToUse.setImageResource(0);

うまくいくようには見えませんが、気まぐれで試してみたところ、完全に機能しました。


2
実際には、無効な画像リソースを設定すると機能します(
-1、45

8
いいえ、-1に設定すると、android.content.res.Resources $ NotFoundExceptionが発生します。0が動作するようです。
NateS 2011

28
この場合、リストビューをスクロールしたとき。どういうわけかそれを0に設定したimageviewは間違った画像を表示します(別のimageviewからの画像を表示します)ので、以下の解像度でそれを実行できますviewToUse.setImageResource(android.R.color.transparent);
Sruit A.Suk

3
「android.content.res.Resources $ NotFoundException:Resource ID#0x0」というメソッドを試すと、このエラーが1回発生したため、ImageViewを「クリア」するには、空の画像を設定するのが最良の方法のようです
Pavel Alexeev

16

別の画像が表示されていないときにImageViewに設定するデフォルトの画像が必要なようです。これは、連絡先アプリケーションが行う方法です。

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

67
いいえ、必要ありません。内容をクリアしたいだけです。ユーザーは後で新しい画像を選択できます。
Pentium10、

3
連絡先アプリはオープンソースです(android.git.kernel.org/?p=platform/packages/apps/…)。ソースコードを調べました。彼らはQuickContactBadge(ImageViewのサブクラス)を使用していることがわかり、写真がない場合は、setImageResourceを使用してデフォルトの画像を設定します。特にgetView()の詳細については、com.android.contacts.ContactsListActivity#ContactItemListAdapterを確認してください。
Dan Lew、

9
それがあなたが望むものではないのに、なぜあなたはその答えを正しいものとしてチェックしたのですか?
arniotaki 2014年

3
ダニエル人々が画像を鮮明にしたいのには多くの理由があるかもしれません。
K-SOの毒性が高まっています。

1
彼はデフォルトの画像を望んでいません。彼はそれがクリアされることを望んでいます。
EpicPandaForce 2016

13

ImageViewでImageとDrawableCacheをクリアするためにこれを試しました

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

これがうまくいくことを願っています!


9

これらの解決策のいずれも、すでに設定した画像(特にsetImageResource(0)またはsetImageResources(android.R.color.transparent))をクリアしていない場合は、現在の画像がを使用して背景として設定されていないことを確認してくださいsetBackgroundDrawable(...)

コードは、前景の画像リソースを、設定した背景画像の前で透明なものに設定するだけで、引き続き表示されます。


6

ちょっと私はこの答えに非常に遅れていることを知っていますが、これを共有する必要があると思っただけで、

uがイメージをリセットしたときに呼び出すメソッドは、uがイメージを設定しているときに呼び出したメソッドと同じでなければなりません。

あなたイメージソースをリセットしたいとき@ dennis.sheepard回答は、uが元々ビットマップで画像を設定している場合にのみに機能します。setImageResource()

例えば、

私は使用setImageBitmap()していたため、設定が機能しませんでしたがsetImageResource(0)、代わりにを使用しましたsetImageBitmap(null)


1
あなたは正しいアジェイ、私は同じことを観察しました。条件に応じて、同じイメージビューに代わりにsetImageBitmap()/ setImageResource()を使用しました。したがって、イメージビューをクリアするには、setImageResource(0)/ setImageBitmap(null)を使用する必要がありました。ありがとう!
Monica M


3

ドローアブル(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);

これは私にとって美しく機能します!


2

ListViewアイテムの画像の場合、「画像なし」の場合はリストアダプターImageView.setVisibility(View.INVISIBLE)またはImageView.setImageBitmap(null)リストアダプターで設定できます。


2

以下のようkwasiが書いたとgolu編集した、あなたの代わりに白、透明使用することができます。

ファイル 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);

1

これは私にとってはうまくいきます。

emoji.setBackground(null);

これは実行時にクラッシュします。

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

0

ImageViewで画像を削除するには、次の

title_image.setImageResource(-1);

ように使用します。


0

サポートライブラリを使用すると、すべてのデバイスでサポートされるのAppCompatImageView代わりに取得されます。そのため、やと同じ方法で使用することで問題はありません。ImageViewsetImageResource(0)setImageDrawable(null)setImageBitmap(null)

それ以外の場合は、一部のAndroidバージョンから問題なく動作するはずです。Androidのコードと私のテストによると、setImageResource(0)Android API 22(5.1)から使用しても安全だと思います。API 22とAPI 21のAndroidコードはこちらで確認できます


0

同じ問題に直面していましたが、ビューの背景色をレイアウトの背景色に変更しました。

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

//次に画像を設定します

edit_countflag.setImageResource(R.drawable.flag_id);

0

を使用してImageViewの画像も削除しようとしましたImageView.setImageRessource(0)が、うまくいきませんでした。
幸いなことに、ログに次のメッセージが表示されました。

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

-1

あなたがすべて設定しようとしていることを指摘できますか?

あなたは次のことをしてはいけませんか?

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

imageview.setImageDrawable(getApplicationContext().getResources().getDrawable(R.drawable.icon_profile_image));
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.