Bagaimana cara menghapus ImageView di Android?


277

Saya menggunakan kembali ImageViewuntuk tampilan saya, tetapi pada titik tertentu saya tidak memiliki nilai untuk meletakkannya.

Jadi bagaimana cara menghapus ImageViewdi Android?

Saya sudah mencoba:

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

Tak satu pun dari mereka yang membersihkan tampilan, masih menunjukkan gambar sebelumnya.


1
saya sarankan untuk memuat gambar default ketika Anda tidak memiliki nilai.
Praveen

3
Saya tidak memiliki gambar default, hanya latar belakang. Saya hanya perlu memiliki latar belakang.
Pentium10

Saya pikir jawaban yang diterima perlu diubah di sini. Apakah ada ketentuan tentang stackoverflow untuk mengubah / memindahkan jawaban yang diterima ke jawaban aktual (atau lebih banyak jawaban yang lebih baik) dari jawaban 'pemecahan masalah'? Karena banyak pengguna (seperti saya) dapat menerima jawaban yang diterima daripada jawaban yang lebih baik
Shirish Herwade

1
@ShirishHerwade ok berubah
Pentium10

Saya menghadapi masalah yang sama saya melakukannya seperti ini: stackoverflow.com/a/50448536/5697474
Syed Danish Haider

Jawaban:


540

Saya biasa melakukannya dengan solusi dennis.sheppard :

viewToUse.setImageResource(0);

ini berfungsi tetapi tidak didokumentasikan sehingga tidak benar-benar jelas apakah itu memengaruhi sesuatu yang lain dalam tampilan (Anda dapat memeriksa kode ImageView jika Anda suka, saya tidak).

Saya pikir solusi terbaik adalah:

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

Saya suka solusi ini karena sebagian besar tidak ada yang rumit dalam mengembalikan negara dan juga jelas apa yang dilakukannya.


3
Saya pikir menggunakan setImageResource dengan pengidentifikasi warna akan memberi Anda masalah mogok di Android 2.2.1
Blundell

2
bagi saya berfungsi viewToUse.setImageResource (android.R.color.transparent); kode
Javier

3
Waspadalah terhadap hal ini, jika Anda benar-benar memiliki sumber daya dengan id 0, ini akan membuat set yang dapat digambar sebagai tampilan halaman Anda. Tidak yakin apa kemungkinan memiliki itu sebagai id ..
Chris

1
Saya punya masalah dengan setImageResource (0) - tidak selalu berfungsi. Tapi mengaturnya menjadi transparan sangat bisa diandalkan. Terima kasih!
Scott Biggs

6
viewToUse.setImageResource(0);tidak bekerja, tetapi viewToUse.setImageResource(android.R.color.transparent);berhasil.
zionpi

119

Saya memiliki masalah yang sama, di mana saya pada dasarnya perlu menghapus ImageViews dari layar sepenuhnya. Beberapa jawaban di sini membawa saya ke arah yang benar, tetapi akhirnya memanggil setImageDrawable () bekerja untuk saya:

imgView.setImageDrawable(null);

(Seperti disebutkan dalam komentar, penggunaan tersebut didokumentasikan dalam dokumen resmi: ImageView # setImageDrawable .)


3
Ini berfungsi paling tidak di aplikasi saya. setImageResource (0) kadang-kadang berfungsi, tetapi tidak yang lain.
Hong

5
Jika Anda telah menetapkan gambar menggunakan setImageBitmap, inilah yang Anda inginkan
Kevin Parker

Ini menurut saya jawaban terbaik! Bersih, valid, dan sangat singkat. Tidak perlu mendefinisikan gambar kosong dan menerapkannya atau hal-hal seperti itu.
Potaito

Jawaban ini sebenarnya bekerja dengan andal! Dan itu adalah posting paling awal yang menyatakan kode ini sebagai solusi. Karenanya saya memutakhirkan yang ini dan bukan pos lainnya dengan jawaban yang sama.
Android Asli

2
Jawaban ini sebenarnya didokumentasikan pada dokumen resmi: developer.android.com/reference/android/widget/…

79

Saya tahu ini sudah tua, tetapi saya bisa menyelesaikannya dengan ini

viewToUse.setImageResource(0);

Sepertinya tidak akan berhasil, tetapi saya mencobanya sambil lalu, dan itu berhasil dengan sempurna.


2
Sebenarnya, mengaturnya untuk karya sumber daya gambar APAPUN yang tidak valid (-1, 45, dll)
dvallejo

8
Tidak, pengaturan ke -1 memberi Anda android.content.res.Resources $ NotFoundException. 0 sepertinya berfungsi.
NateS

28
Kasus ini, ketika Anda menggulir tampilan daftar Anda. entah bagaimana imageview yang menetapkannya sebagai 0 akan menampilkan gambar yang salah (itu akan menampilkan gambar dari imageview lain) sehingga resolusi di bawah ini dapat melakukannya viewToUse.setImageResource (android.R.color.transparent);
Sruit A.Suk

3
Saya mendapatkan kesalahan ini satu kali, ketika mencoba metode ini: "android.content.res.Resources $ NotFoundException: Resource ID # 0x0", jadi sepertinya menetapkan gambar kosong adalah cara terbaik untuk "menghapus" ImageView
Pavel Alexeev

16

Kedengarannya seperti yang Anda inginkan adalah gambar default untuk mengatur ImageView Anda ketika itu tidak menampilkan gambar yang berbeda. Beginilah aplikasi Kontak melakukannya:

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

67
Tidak, saya tidak mau ini. Saya hanya ingin menghapus isinya. Pengguna dapat memilih gambar baru setelah.
Pentium10

3
Aplikasi Kontak adalah open source ( android.git.kernel.org/?p=platform/packages/apps/… ). Saya menyelidiki kode sumber. Ternyata mereka menggunakan QuickContactBadge (subclass dari ImageView), dan ketika mereka tidak memiliki foto, mereka menggunakan setImageResource untuk menetapkan gambar default. Periksa com.android.contacts.ContactsListActivity # ContactItemListAdapter untuk detailnya, terutama di getView ().
Dan Lew

9
Mengapa Anda memeriksa jawaban itu sebagai jawaban yang benar jika bukan yang Anda inginkan?
arniotaki

3
Daniel Mungkin ada banyak alasan mengapa orang ingin gambarnya jelas.
K - Keracunan dalam SO tumbuh.

1
Dia tidak ingin gambar default. Dia ingin itu dibersihkan.
EpicPandaForce

13

Saya mencoba ini untuk menghapus Image dan DrawableCache di ImageView

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

Saya harap ini berhasil untuk Anda!


9

Jika tidak ada solusi ini yang menghapus gambar yang sudah Anda tetapkan (terutama setImageResource(0) atau setImageResources(android.R.color.transparent), periksa untuk memastikan gambar saat ini tidak ditetapkan sebagai latar belakang menggunakan setBackgroundDrawable(...)atau sesuatu yang serupa.

Kode Anda hanya akan mengatur sumber gambar di latar depan untuk sesuatu yang transparan di depan gambar latar yang telah Anda tetapkan dan masih akan ditampilkan.


6

Hei saya tahu saya sangat terlambat untuk jawaban ini, tetapi hanya berpikir saya harus membagikan ini,

Metode untuk memanggil ketika Anda mereset gambar harus sama dengan metode yang Anda panggil ketika Anda mengaturnya.

Ketika Anda ingin mengatur ulang sumber gambar @ dennis.sheepard jawab hanya berfungsi dengan baik jika Anda awalnya mengatur gambar dalam bitmap menggunakansetImageResource()

misalnya,

Saya telah menggunakan setImageBitmap()dan karenanya pengaturan setImageResource(0)tidak bekerja, sebaliknya saya menggunakan setImageBitmap(null).


1
Anda benar Ajay, saya mengamati hal yang sama. Saya menggunakan setImageBitmap () / setImageResource () sebagai alternatif untuk tampilan gambar yang sama tergantung pada kondisinya. Karenanya saya harus menggunakan setImageResource (0) / setImageBitmap (null) alternativley untuk menghapus imageview. Terima kasih!
Monica M

5

jika Anda menggunakan glide, Anda dapat melakukannya seperti ini.

Glide.with(yourImageView).clear(yourImageView)

Terima kasih refig, Ini membantu banyak.
ucMedia

3

Saya dapat mencapai ini dengan mendefinisikan drawable (sesuatu seperti blank_white_shape.xml):

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

Lalu ketika saya ingin menghapus tampilan gambar saya hanya menelepon

 imageView.setImage(R.drawable.blank_white_shape);

Ini bekerja dengan baik untuk saya!


2

Untuk gambar item ListView Anda dapat mengatur ImageView.setVisibility(View.INVISIBLE)atau ImageView.setImageBitmap(null)di adaptor daftar untuk kasus "tidak ada gambar".


2

Saat kwasi menulis dan mengedit golu , Anda dapat menggunakan transparan, bukan putih:

Mengajukan 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>

Di dalam suatu kegiatan, lihat, dll:

view.setImageResource(R.drawable.transparent);

1

Ini bekerja untuk saya.

emoji.setBackground(null);

Ini macet saat runtime.

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

0

Untuk menghapus gambar dalam penggunaan ImageView:

title_image.setImageResource(-1);

ini berfungsi untuk saya


0

Jika Anda menggunakan perpustakaan dukungan, Anda mendapatkan AppCompatImageViewbukan ImageView, yang mendukung setImageResource(0)pada semua perangkat, sehingga Anda harus baik-baik dengan menggunakan dengan cara yang sama dengan menggunakan setImageDrawable(null)dansetImageBitmap(null)

Kalau tidak, itu akan berfungsi dengan baik mulai dari beberapa versi Android. Menurut kode Android dan menurut tes saya, saya pikir itu harus aman digunakan setImageResource(0)dari Android API 22 (5.1). Anda dapat melihat kode Android API 22 vs API 21, di sini


0

Saya menghadapi masalah yang sama saya mengubah warna latar belakang tampilan menjadi warna latar belakang tata letak yang dapat Anda lakukan seperti ini:

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

// lalu atur gambar

edit_countflag.setImageResource(R.drawable.flag_id);

0

Saya mencoba untuk menghapus Image of ImageView juga dengan menggunakan ImageView.setImageRessource(0)tetapi tidak berhasil bagi saya.
Untungnya saya mendapat pesan ini di log:

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

Jadi katakanlah, layoutmanageradalah contoh Anda untuk tata letak, daripada yang perlu Anda lakukan itu:

RelativeLayout layoutManager = new RelativeLayout(this);
ImageView image = new ImageView(this);

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

-1

Bisakah saya tunjukkan apa yang Anda semua coba atur dan int di mana itu mengharapkan drawable.

Anda tidak harus melakukan yang berikut?

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

imageview.setImageDrawable(getApplicationContext().getResources().getDrawable(R.drawable.icon_profile_image));
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.