Android'de bir ImageView nasıl temizlenir?


277

ImageViewEkranlarım için s'yi yeniden kullanıyorum , ancak bir noktada koymak için değerlerim yok.

Peki bir ImageViewAndroid nasıl temizlenir ?

Denedim:

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

Hiçbiri görünümü temizlemedi, yine de önceki görüntüyü gösteriyor.


1
değer olmadığında varsayılan görüntüyü yüklemenizi öneririm.
Praveen

3
Varsayılan resmim yok, sadece bir arka planım var. Sadece arka plana ihtiyacım var.
Pentium10

Kabul edilen cevabın burada değiştirilmesi gerektiğini düşünüyorum. Yığın akışı hakkında, kabul edilen cevabı 'geçici çözüm' cevabından fiili cevaba (veya daha iyi cevaba) değiştirmek / taşımak için herhangi bir hüküm var mı? Çünkü pek çok kullanıcı (benim gibi) daha iyi cevaptan ziyade kabul edilebilir.
Shirish Herwade

1
@ShirishHerwade ok değişti
Pentium10

Aynı sorunla karşı karşıya kaldım bunu böyle yaptım: stackoverflow.com/a/50448536/5697474
Syed Danimarka Haider

Yanıtlar:


540

Bunu dennis.sheppard çözümü ile yapardım :

viewToUse.setImageResource(0);

çalışır ama görünümünde başka bir şey etkiler eğer gerçekten açık değil belgelenmez (isterseniz ImageView kodunu kontrol edebilirsiniz , ben yapmadım).

Bence en iyi çözüm:

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

Bu çözümü en çok sevdim çünkü devleti geri döndürmede zor bir şey yok ve ne yaptığını da belli ediyor.


3
Bence renk tanımlayıcı ile setImageResource kullanmak Android 2.2.1
Blundell

2
benim için viewToUse.setImageResource (android.R.color.transparent); kodu
Javier

3
buna dikkat edin, eğer aslında 0 kimliğine sahip bir kaynağınız varsa, bu sizin görüntüleme görünümünüz olarak çizilebilir seti etkileyecektir. Yine de bir kimlik olarak bu şansı emin değilim ..
Chris

1
SetImageResource (0) ile ilgili sorunlar yaşadım - her zaman işe yaramadı. Ancak saydam olarak ayarlamak çok güvenilirdir. Teşekkürler!
Scott Biggs

6
viewToUse.setImageResource(0);işe yaramadı, viewToUse.setImageResource(android.R.color.transparent);çalıştı.
zionpi

119

Benzer bir sorun vardı, temelde ImageViews ekrandan tamamen kaldırmak gerekiyordu. Buradaki bazı cevaplar beni doğru yönde yönlendirdi, ancak sonuçta setImageDrawable () çağrısı benim için çalıştı:

imgView.setImageDrawable(null);

(Yorumda belirtildiği gibi, bu kullanım resmi dokümanlarda belgelenmiştir: ImageView # setImageDrawable .)


3
Bu en azından uygulamamda güvenilir bir şekilde çalışıyor. setImageResource (0) bazen çalışır, ancak diğerleri çalışmaz.
Hong

5
Görüntüyü setImageBitmap kullanarak ayarladıysanız, istediğiniz şey budur
Kevin Parker

Bence bu en iyi cevap! Temiz, geçerli ve çok kısa. Boş bir çekmeceyi tanımlamaya ve onu veya bunun gibi şeyleri uygulamaya gerek yoktur.
Potaito

Bu cevap aslında güvenilir bir şekilde çalışıyor! Ve bu kodu bir çözüm olarak belirten ilk gönderi. Bu yüzden bu cevabı iptal ettim ve aynı cevaba sahip diğer yayınları değil.
Orijinal Android

2
Bu cevap aslında resmi dokümanlar üzerinde belgelenmiştir: developer.android.com/reference/android/widget/…

79

Bunun eski olduğunu biliyorum, ama bunu başarabildim

viewToUse.setImageResource(0);

Çalışması gerektiği gibi görünmüyor, ama bir hevesle denedim ve mükemmel çalıştı.


2
Aslında, HERHANGİ BİR geçersiz görüntü kaynağı olarak çalışıyor (-1, 45, vb.)
dvallejo

8
Hayır, -1 olarak ayarlandığında android.content.res.Resources $ NotFoundException verir. 0 işe yarıyor gibi görünüyor.
NateS

28
Bu durum, liste görünümünüzü kaydırdığınızda. bir şekilde 0 olarak ayarlanan görüntü görünümü yanlış görüntüyü gösterecektir (başka bir görüntü görünümünden görüntü gösterecektir), böylece aşağıdaki çözünürlük bunu yapabilir. viewToUse.setImageResource (android.R.color.transparent);
Sruit A.Suk

3
Bu yöntemi denerken bir kez bu hatayı aldım: "android.content.res.Resources $ NotFoundException: Kaynak Kimliği # 0x0", bu nedenle boş bir görüntüyü ayarlamak ImageView "
Pavel

16

ImageView'inizi farklı bir görüntü göstermediğinde ayarlamak için varsayılan bir görüntü olmasını istediğiniz gibi görünür. Kişiler uygulaması bunu şu şekilde yapar:

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

67
Hayır, bunu istemiyorum. Sadece içeriği silmek istiyorum. Kullanıcı daha sonra yeni görüntü seçebilir.
Pentium10

3
Kişiler uygulaması açık kaynak kodludur ( android.git.kernel.org/?p=platform/packages/apps/… ). Kaynak kodunu araştırdım. Bir QuickContactBadge (ImageView alt sınıfı) kullandıkları ve bir fotoğrafa sahip olmadıklarında, varsayılan bir görüntü ayarlamak için setImageResource kullanıyorlar. Ayrıntılar için, özellikle getView () öğesinde com.android.contacts.ContactsListActivity # ContactItemListAdapter öğesini kontrol edin.
Dan Lew

9
İstediğiniz şey değilse neden bu cevabı doğru cevap olarak kontrol ettiniz?
arniotaki

3
Daniel İnsanların görüntüyü neden net istediklerinin birçok nedeni olabilir.
K - SO'da toksisite artıyor.

1
Varsayılan bir görüntü istemiyor. Temizlenmesini istiyor.
EpicPandaForce

13

ImageView DrawableCache ve temizlemek için bunu denedim

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

Umarım bu senin için çalışır!


9

Bu çözümlerin hiçbiri önceden ayarladığınız bir görüntüyü temizlemiyorsa (özellikle setImageResource(0)veya setImageResources(android.R.color.transparent)geçerli görüntünün arka plan kullanımı setBackgroundDrawable(...)veya benzeri bir şey olarak ayarlanmadığından emin olun .

Kodunuz, ön plandaki görüntü kaynağını ayarladığınız arka plan görüntüsünün önünde saydam bir şeye ayarlayacak ve yine de gösterecektir.


6

Hey bu cevaba son derece geç kaldığımı biliyorum, ama bunu paylaşmam gerektiğini düşündüm,

Görüntüyü u sıfırladığınızda çağrılacak yöntem, u ayarlarken u ile aynı yöntem olmalıdır.

U görüntü kaynağını sıfırlamak istediğinizde @ dennis.sheepard cevap sadece u kullanarak görüntüyü bitmap'de ayarlıyorsanız iyi çalışırsetImageResource()

Örneğin,

kullandım setImageBitmap()ve dolayısıyla ayar setImageResource(0)işe yaramadı, bunun yerine kullandım setImageBitmap(null).


1
Haklısın Ajay, ben de aynısını gözlemledim. Koşullara bağlı olarak aynı görüntü için alternatif olarak setImageBitmap () / setImageResource () kullandım. Bu nedenle, görüntü görünümünü temizlemek için setImageResource (0) / setImageBitmap (null) alternativley kullanmak zorunda kaldım. Teşekkürler!
Monica M

5

glide kullanıyorsanız bunu böyle yapabilirsiniz.

Glide.with(yourImageView).clear(yourImageView)

Teşekkürler refig, çok yardımcı olur.
ucMedia

3

Ben bir drawable (blank_white_shape.xml gibi bir şey) tanımlayarak bunu başardı :

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

Sonra görüntü görünümünü temizlemek istediğimde

 imageView.setImage(R.drawable.blank_white_shape);

Bu benim için güzel çalışıyor!


2

ListView öğe görüntüsü için ImageView.setVisibility(View.INVISIBLE)veya ImageView.setImageBitmap(null)"görüntü yok" durumu için liste adaptörünü ayarlayabilirsiniz .


2

As Kwasi yazıp golu düzenlenmiş, bunun yerine beyaz, şeffaf kullanabilirsiniz:

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

Bir faaliyetin, görünümün vb. İçinde:

view.setImageResource(R.drawable.transparent);

1

Bu benim için çalışıyor.

emoji.setBackground(null);

Bu, çalışma zamanında çöküyor.

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

0

ImageView kullanımındaki görüntüyü kaldırmak için:

title_image.setImageResource(-1);

benim için çalışıyor


0

Destek kitaplığını kullanırsanız, AppCompatImageViewbunun yerine tüm cihazlarda ImageViewdesteklenir setImageResource(0), bu nedenle onu kullanmakla aynı şekilde kullanmanız gerekir.setImageDrawable(null) vesetImageBitmap(null)

Aksi takdirde, bazı Android sürümlerinden başlayarak iyi çalışmalıdır. Android koduna ve testlerime göre setImageResource(0), Android API 22 (5.1) 'den güvenli bir şekilde kullanılması gerektiğini düşünüyorum . API 22 ve API 21'in Android kodunu burada görebilirsiniz.


0

Aynı sorunla karşı karşıya kaldım, arka plan rengini düzenini arka plan rengine değiştirdim u şöyle yapabilirsiniz:

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

// sonra resmi ayarla

edit_countflag.setImageResource(R.drawable.flag_id);

0

ImageView Image'ı kullanarak da kaldırmaya çalıştım ImageView.setImageRessource(0)ama benim için çalışmadı.
Neyse ki günlüklerde bu mesajı aldım:

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

Diyelim ki, layoutmanagerdüzen için örnek, bunu yapmanız gerekenden daha fazla:

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

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

-1

Ben sadece sizin bir çizilebilir bekliyor nerede ayarlamaya ve int ne işaret edebilir miyim.

aşağıdakileri yapmamalısın

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

imageview.setImageDrawable(getApplicationContext().getResources().getDrawable(R.drawable.icon_profile_image));
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.