2010-09-24 9 views
140

मैं एंड्रॉयड पर इस तरह अदृश्य करने के लिए visibility सेट:मैं कैसे देख सकता हूं कि दृश्य दृश्यमान है या नहीं, एंड्रॉइड में?

myImageView.setVisibility(View.INVISIBLE); 

और फिर यह दृश्यमान बनाने के लिए:

myImageView.setVisibility(View.VISIBLE); 

अब मैं अगर myImageView दिखाई दे रहा है या नहीं पता नहीं है, मैं कैसे जांच कर सकते हैं यह इस तरह है:

if (myImageView IS VISIBLE) { 
    Do something 
} else { 
    Do something else 
} 

मैं यह कैसे कर सकता हूं? मुझे ब्रैकेट के भीतर क्या लिखना है?

उत्तर

375

हालांकि View.getVisibility() दृश्यता प्राप्त करता है, यह एक साधारण सत्य/झूठा नहीं है। एक दृश्य में इसकी दृश्यता तीन चीजों में से एक पर सेट हो सकती है।

देखें। विज़िबल दृश्य दृश्यमान है।

View.INVISIBLE दृश्य अदृश्य है, लेकिन किसी भी रिक्ति यह सामान्य रूप से ले जाएगा अभी भी उपयोग किया जाएगा। इसकी "अदृश्य"

View.GONE दृश्य समाप्त हो जाता है, आप इसे नहीं देख सकते हैं और यह "स्पॉट" ऊपर नहीं ले करता है।

तो अपने सवाल का जवाब देने, आप देख रहे हैं:

if (myImageView.getVisibility() == View.VISIBLE) { 
    // Its visible 
} else { 
    // Either gone or invisible 
} 
+3

दृश्यमान स्क्रीन की सीमाओं के भीतर नहीं होने पर दृश्यमान हो सकता है, इसलिए यह सभी मामलों में सटीक नहीं होगा। हालांकि, [बिल मोटेज़] (http://stackoverflow.com/a/12428208/62921) उत्तर हर समय काम कर रहा है। – ForceMagic

+1

फोर्समैजिक सही है और कारण मैंने अपना जवाब पोस्ट किया है। एक दृश्य को देखने के लिए सेट किया जा सकता है। विज़िबल और आपका if-logic सत्य वापस आ जाएगा, हालांकि, दृश्य वास्तव में उपयोगकर्ता को दिखाई नहीं दे सकता है। मेरा समाधान, नीचे, सही होगा, और केवल तभी, यदि उपयोगकर्ता वास्तव में स्क्रीन के दृश्य पोर्ट पर दृश्य का कोई भी भाग देख सकता है। –

+0

@ बिलमोटे मेरा समाधान मूल प्रश्न को हल करना था। दृश्यता विशेषता का मूल्य कैसे प्राप्त करें। – William

3

आप संबंधित विधि getVisibility() का उपयोग करेंगे। 'Get' और 'set' के साथ उपसर्ग किए गए विधि नाम गुणों का प्रतिनिधित्व करने के लिए जावा का सम्मेलन हैं। कुछ भाषा में गुणों के लिए वास्तविक भाषा संरचनाएं होती हैं लेकिन जावा उनमें से एक नहीं है। तो जब आप 'सेटएक्स' लेबल वाले कुछ देखते हैं, तो आप 99% निश्चित हो सकते हैं कि एक संबंधित 'getX' है जो आपको मूल्य बताएगा।

98

या आप बस

View.isShown() 
+2

यह अधिक सटीक है क्योंकि यह जांचता है कि व्यू डिस्प्लेलिस्ट पर दृश्य "दृश्यमान" हो सकता है लेकिन कोई अभिभावक नहीं है। – user123321

+2

सत्य हो सकता है जबकि यह दृश्यमान स्क्रीन की सीमा के भीतर नहीं है, इसलिए यह सभी मामलों में सटीक नहीं होगा। हालांकि, [बिल मोटेज़] (http://stackoverflow.com/a/12428208/62921) उत्तर हर समय काम कर रहा है। – ForceMagic

+0

देखें # isShown() स्क्रीन पर दिखाए गए यह सत्यापित करने के लिए सभी मूल दृश्य दृश्यता को पार करता है। यह प्रक्रिया कभी-कभी महंगा हो सकती है। –

47

इस्तेमाल कर सकते हैं तो छवि लेआउट यह हो सकता है "View.VISIBLE का हिस्सा है "लेकिन इसका मतलब यह नहीं है कि यह दृश्यमान स्क्रीन की सीमाओं के भीतर है। यदि आप यही कर रहे हैं; यह काम करेगा:

Rect scrollBounds = new Rect(); 
scrollView.getHitRect(scrollBounds); 
if (imageView.getLocalVisibleRect(scrollBounds)) { 
    // imageView is within the visible window 
} else { 
    // imageView is not within the visible window 
} 
+0

क्या आप समझेंगे कि यह क्यों काम करता है? मैंने View.getLocalVisibleRect के लिए स्रोत कोड देखा है और मुझे यकीन नहीं है कि यह कैसे काम करता है। – yarian

+0

यहां 2 चीजें चल रही हैं। 1) View.getHitRect (scrollBounds) अपने माता-पिता के निर्देशांक में हिट आयत प्राप्त करता है और उन्हें स्क्रॉलबाउंड में पॉप्युलेट करता है और 2) हम scrollVounds के साथ ImageView के View.getLocalVisibleRect (scrollBounds) को बीज करते हैं। यदि ImageView scrollBounds की सीमाओं के भीतर आता है तो विधि सही होती है। –

+1

नोट: नीचे टिप्पणी स्वरूपण परेशानी होने के बाद। क्षमा याचना। ठीक है, निर्दिष्ट करने के लिए मेरा बुरा नहीं है। भ्रम का सटीक बिंदु 'imageView.getLocalVisibleRect (scrollBounds)' कॉल है। grepcode से: 'सार्वजनिक अंतिम बूलियन getLocalVisibleRect (Rect r) { प्वाइंट ऑफसेट = नया प्वाइंट(); अगर (getGlobalVisibleRect (आर, ऑफसेट)) { r.offset (-offset.x, -offset.y); // मेक आर स्थानीय सच वापसी; } झूठी वापसी; } ' – yarian

संबंधित मुद्दे

 संबंधित मुद्दे