Android में ImageView कैसे साफ़ करें?


277

मैं पुन: उपयोग कर रहा हूं ImageView अपने प्रदर्शनों के लिए हूं, लेकिन कुछ बिंदुओं पर मेरे पास इसे डालने के लिए मूल्य नहीं हैं।

तो ImageViewएंड्रॉइड में कैसे साफ़ करें ?

मैंने कोशिश की:

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

उनमें से किसी ने दृश्य को साफ नहीं किया है, यह अभी भी पिछली छवि दिखाता है।


1
जब आपके पास कोई मूल्य नहीं है, तो मैं डिफ़ॉल्ट छवि को लोड करने का सुझाव देता हूं।
प्रवीण

3
मेरी कोई डिफ़ॉल्ट छवि नहीं है, बस एक पृष्ठभूमि है। मुझे सिर्फ पृष्ठभूमि की जरूरत है।
पेंटियम

मुझे लगता है कि स्वीकृत उत्तर को यहां बदलने की जरूरत है। क्या 'वर्कअराउंड' उत्तर से वास्तविक उत्तर (या अधिक बेहतर उत्तर) के लिए स्टैकओवरफ़्लो पर कोई प्रावधान स्वीकार किए जाते हैं? क्योंकि बहुत से उपयोगकर्ता (मेरे जैसे) बेहतर जवाब के बजाय स्वीकार किए जा सकते हैं
शिरीष हेरवाडे

1
@ शिरीषहेरवे ओके बदल गए
पेंटियम

मैं उसी मुद्दे का सामना कर रहा था जो मैं इसे इस तरह करता हूं: stackoverflow.com/a/50448536/5697474
सैयद दानिश हैदर

जवाबों:


540

मैं इसे dennis.sheppard समाधान के साथ करता था :

viewToUse.setImageResource(0);

यह काम करता है लेकिन यह प्रलेखित नहीं है इसलिए यह वास्तव में स्पष्ट नहीं है यदि यह दृश्य में कुछ और प्रभाव डालता है ( यदि आप चाहें तो ImageView कोड की जांच कर सकते हैं, मैंने नहीं किया)।

मुझे लगता है कि सबसे अच्छा समाधान है:

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

मैं इस समाधान को सबसे अधिक पसंद करता हूं क्योंकि राज्य को प्रतिष्ठित करने में कुछ भी मुश्किल नहीं है और यह भी स्पष्ट है कि यह क्या कर रहा है।


3
मुझे लगता है कि एक रंग पहचानकर्ता के साथ setImageResource का उपयोग करना आपको एंड्रॉइड 2.2.1 पर दुर्घटनाग्रस्त मुद्दों को देगा
Blundell

2
मेरे लिए viewToUse.setImageResource (android.R.color.transparent) काम करता है; कोड
जेवियर

3
इस से सावधान रहें, यदि आपके पास वास्तव में 0 की आईडी वाला एक संसाधन है, तो यह सेट को आपके दृश्य के रूप में आकर्षित करेगा। यकीन नहीं है कि क्या संभावना है कि एक आईडी के रूप में हालांकि ..
क्रिस

1
मुझे setImageResource (0) के साथ समस्या थी - हमेशा काम नहीं किया। लेकिन इसे पारदर्शी पर सेट करना बहुत विश्वसनीय है। धन्यवाद!
स्कॉट बिग्स

6
viewToUse.setImageResource(0);काम नहीं किया, लेकिन viewToUse.setImageResource(android.R.color.transparent);काम किया।
जियोनी

118

मुझे एक समान समस्या थी, जहां मुझे मूल रूप से पूरी तरह से स्क्रीन से ImageView को हटाने की आवश्यकता थी। यहाँ कुछ उत्तर मुझे सही दिशा में ले गए, लेकिन अंततः कॉलिंगमेजेजेबल () मेरे लिए काम किया:

imgView.setImageDrawable(null);

(जैसा कि टिप्पणी में उल्लेख किया गया है, इस तरह के उपयोग को आधिकारिक डॉक्स में दर्ज़ किया गया है: ImageView # setImageDrawable ।)


3
यह कम से कम मेरे ऐप में मज़बूती से काम करता है। setImageResource (0) कभी-कभी काम करता है, लेकिन अन्य नहीं।
हांग

5
यदि आपने setImageBitmap का उपयोग करके छवि सेट की है तो आप यही चाहते हैं
केविन पार्कर

यह मेरी राय में सबसे अच्छा जवाब है! यह साफ, वैध और बहुत छोटा है। किसी रिक्त ड्रॉबल को परिभाषित करने और इसे लागू करने या इस तरह से सामान करने की आवश्यकता नहीं है।
पोट्टिटो

यह जवाब वास्तव में मज़बूती से काम करता है! और यह इस कोड को एक समाधान के रूप में बताते हुए सबसे पहला पोस्ट है। इसलिए मैंने एक ही उत्तर के साथ इस एक और अन्य पोस्ट को अपडाउन किया।
मूल Android

2
यह उत्तर वास्तव में आधिकारिक डॉक्स पर प्रलेखित है: developer.android.com/reference/android/widget/…

79

मुझे पता है कि यह पुराना है, लेकिन मैं इसे पूरा करने में सक्षम था

viewToUse.setImageResource(0);

ऐसा नहीं लगता कि यह काम करना चाहिए, लेकिन मैंने इसे पूरी तरह से आजमाया, और इसने पूरी तरह से काम किया।


2
वास्तव में, इसे किसी भी अवैध छवि संसाधन कार्यों (-1, 45, आदि) पर सेट करना
dvallejo

8
नहीं, -1 पर सेटिंग आपको android.content.res.es स्रोत $ NotFoundException देता है। 0 काम करने लगता है।
नैट्स

28
यह मामला, जब आप अपनी सूची को स्क्रॉल करते हैं। किसी तरह की छवि जो इसे 0 के रूप में सेट करती है, वह गलत छवि दिखाएगी (यह किसी अन्य छवि से छवि दिखाएगी) इसलिए नीचे दिया गया संकल्प इसे देख सकता है। TUUse.setImageResource (android.R.color.transparent);
एस.यू.एस। जूल

3
इस विधि को आजमाते समय मुझे एक बार यह त्रुटि मिली: "android.content.res.esource $ NotFoundException: Resource ID # 0x0", इसलिए ऐसा लगता है कि खाली छवि सेट करना 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
नहीं, मैं यह नहीं चाहता। मैं केवल सामग्री को साफ करना चाहता हूं। उपयोगकर्ता बाद में नई छवि का चयन कर सकता है।
पेंटियम

3
संपर्क ऐप खुला स्रोत है ( android.git.kernel.org/?p=platform/packages/apps/… )। मैंने सोर्स कोड की जांच की। यह पता चला है कि वे एक QuickContactBadge (ImageView का एक उपवर्ग) का उपयोग कर रहे हैं, और जब उनके पास फ़ोटो नहीं है, तो वे डिफ़ॉल्ट छवि सेट करने के लिए setImageResource का उपयोग करते हैं। विशेष रूप से getView () में विवरण के लिए com.android.contacts.ContactsListActivity # ContactItemListAdapter की जाँच करें।
डैन ल्यू

9
आपने उस उत्तर की जाँच सही के रूप में क्यों की अगर वह वह नहीं है जो आप चाहते हैं?
अरनोटकी

3
डैनियल कई कारण हो सकते हैं जैसे लोग छवि को स्पष्ट करना चाहते हैं।
के - एसओ में विषाक्तता बढ़ रही है।

1
वह एक डिफ़ॉल्ट छवि नहीं चाहता है। वह चाहता है कि इसे मंजूरी दे दी जाए।
एपिकपांडाफार्स

13

मैंने इसके लिए ImageView में Image और DrawableCache को साफ़ करने की कोशिश की

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

मुझे उम्मीद है कि यह आपके लिए काम करेगा !


9

यदि इन समाधानों में से कोई भी आपके द्वारा पहले से सेट की गई छवि को साफ़ नहीं कर रहा है (विशेष रूप से setImageResource(0)या setImageResources(android.R.color.transparent), यह सुनिश्चित करने के लिए जांच करें कि वर्तमान छवि पृष्ठभूमि के रूप में सेट नहीं है setBackgroundDrawable(...)या कुछ इसी तरह की है।

आपका कोड अग्रभूमि में छवि संसाधन को आपके द्वारा सेट की गई पृष्ठभूमि छवि के सामने कुछ पारदर्शी करने के लिए सेट करेगा और फिर भी दिखाएगा।


6

अरे मुझे पता है कि मुझे इस उत्तर के लिए बहुत देर हो चुकी है, लेकिन अभी मैंने सोचा कि मुझे यह साझा करना चाहिए,

जब आप छवि को रीसेट करते हैं तो कॉल करने की विधि उसी विधि की होनी चाहिए, जिसे आप यू सेट करते समय यू कहते हैं।

जब आप छवि स्रोत को रीसेट करना चाहते हैं @ dennis.sheepard उत्तर तभी ठीक काम करता है जब आप मूल रूप से छवि को बिटमैप में उपयोग कर रहे होंsetImageResource()

उदाहरण के लिए,

मैंने इस्तेमाल किया था setImageBitmap()और इसलिए setImageResource(0)मैंने काम किया, इसके बजाय मैंने काम किया setImageBitmap(null)


1
आप सही हैं अजय, मैंने वही देखा। मैंने setImageBitmap () / setImageResource () का उपयोग शर्तों के आधार पर एक ही इमेजव्यू के लिए वैकल्पिक रूप से किया। इसलिए मुझे इमेजव्यू को क्लियर करने के लिए setImageResource (0) / setImageBitmap (null) अल्टरनेटिवली का उपयोग करना पड़ा। धन्यवाद!
मोनिका एम

5

यदि आप ग्लाइड का उपयोग करते हैं तो आप इसे इस तरह से कर सकते हैं।

Glide.with(yourImageView).clear(yourImageView)

धन्यवाद refig, यह बहुत मदद करता है।
ucMedia

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 लिखा था और गोलू संपादित, आप पारदर्शी सफेद के बजाय का उपयोग कर सकते:

फ़ाइल 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

यदि आप समर्थन पुस्तकालय का उपयोग करते हैं, तो आप AppCompatImageViewइसके बजाय प्राप्त करते हैं ImageView, जो setImageResource(0)सभी उपकरणों पर समर्थन करता है, इसलिए आपको इसे उसी तरह उपयोग करने के साथ ठीक होना चाहिए जैसे कि उपयोग करनाsetImageDrawable(null) औरsetImageBitmap(null)

अन्यथा, यह कुछ एंड्रॉइड संस्करण से ठीक काम करना चाहिए। एंड्रॉइड के कोड के अनुसार और मेरे परीक्षणों के अनुसार, मुझे लगता है कि setImageResource(0)एंड्रॉइड एपीआई 22 (5.1) से इसका उपयोग करना सुरक्षित होना चाहिए । आप एपीआई 22 के एंड्रॉयड कोड देख सकते हैं एपीआई 21 बनाम, यहाँ


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));
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.