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.

Pentium10
sumber
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.

Mario Lenci
sumber
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 .)

Kon
sumber
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.

dennis.sheppard
sumber
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 ...
}
Dan Lew
sumber
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!

nandha
sumber
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.

Brad English
sumber
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).

Ajay
sumber
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)
Mojtaba Haddadi
sumber
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!

kwasi
sumber
2

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

Arvis
sumber
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);
Kit Kat
sumber
1

Ini bekerja untuk saya.

emoji.setBackground(null);

Ini macet saat runtime.

viewToUse.setImageResource(android.R.color.transparent);  
sbchitra
sumber
0

Untuk menghapus gambar dalam penggunaan ImageView:

title_image.setImageResource(-1);

ini berfungsi untuk saya

Tobore Igbe
sumber
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

pengembang android
sumber
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);
Syed Danish Haider
sumber
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);
TornaxO7
sumber
-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));
Aaron Newton
sumber