2011-01-27 16 views
19

क्या लेआउट की अल्फा/अस्पष्टता और उसके सभी बच्चे के दृश्यों को सेट करना और प्राप्त करना संभव है? मैं पृष्ठभूमि के बारे में बात नहीं कर रहा हूँ। सापेक्ष लेआउट में प्ले, पॉज़ और प्रोग्रेसबार जैसे वीडियो कंट्रोल का संग्रह कहें।लेआउट का अल्फा/अस्पष्टता सेट करें

मैं एनीमेशन का उपयोग फीका इन और आउट करने के लिए कर सकता हूं लेकिन जानना चाहता था कि कोई प्रत्यक्ष विधि है जिसका उपयोग मैं कर सकता था।

उत्तर

59

आप 0 अवधि और setFillAfter विकल्प के साथ अल्फाएनीमेशन का उपयोग करके लेआउट पर अल्फा सेट कर सकते हैं और उसके बच्चे (या उस मामले के लिए कोई अन्य दृश्य) सेट कर सकते हैं।

उदाहरण:

AlphaAnimation alpha = new AlphaAnimation(0.5F, 0.5F); 
alpha.setDuration(0); // Make animation instant 
alpha.setFillAfter(true); // Tell it to persist after the animation ends 
// And then on your layout 
yourLayout.startAnimation(alpha); 

आप एक से अधिक घटकों स्मृति को बचाने के लिए के लिए एक एनीमेशन का उपयोग कर सकते हैं। और फिर से उपयोग करने के लिए रीसेट करें (या फिर अल्फा ड्रॉप करने के लिए एनीमेशन() साफ़ करें।

हालांकि यह कच्चे लग रहा है और हैक किया गया है यह वास्तव में सेट ओवी विचारों पर अल्फा सेट करने का एक अच्छा तरीका है जो अधिक स्मृति या प्रोसेसर समय नहीं लेता है।

हालांकि वर्तमान अल्फा मूल्य प्राप्त करने के बारे में निश्चित नहीं है।

+0

धन्यवाद में है। मैं एनीमेशन का उपयोग कर रहा था लेकिन सेटफिलएफ्टर विधि का उपयोग करने के बजाय एनीमेशन पूरा होने के बाद मैं ऑब्जेक्ट दृश्यता को सेट कर रहा था। –

+0

यह एनिमेशन को तोड़ने लगता है (यदि एनीमेशन के दौरान चलाया जाता है)। इसके लिए कोई फिक्स? – Sufian

+0

कामकाज के रूप में, मैंने 'व्यू' की पृष्ठभूमि के रूप में एक अर्ध-पारदर्शी छवि सेट का उपयोग किया। – Sufian

6

एलेक्स का समाधान काम करता है लेकिन एक और तरीका कस्टम दृश्य बनाना है जो अपने बच्चों को आकर्षित करने से पहले Canvas.saveLayerAlpha() को कॉल करता है। नोट Android 3.0 में एक नया View.setAlpha() API :)

+0

धन्यवाद, सेटएल्फा विधि की प्रतीक्षा कर रहा है। कुछ अन्य भाषाओं से मैं अधिक उपयोग कर रहा हूं। –

15

यहाँ एक विधि है कि सभी संस्करणों में काम करता है (thanks to @AlexOrlov) है है कि वहाँ:

@SuppressLint("NewApi") 
public static void setAlpha(View view, float alpha) 
{ 
    if (Build.VERSION.SDK_INT < 11) 
    { 
     final AlphaAnimation animation = new AlphaAnimation(alpha, alpha); 
     animation.setDuration(0); 
     animation.setFillAfter(true); 
     view.startAnimation(animation); 
    } 
    else view.setAlpha(alpha); 
} 

जाहिर है, एपीआई से कम 11 यदि आप के लिए क्या आपको एक कस्टम व्यू बनाना चाहिए जो अपने बच्चों को चित्रित करने से पहले पर कॉल करे (thanks to @RomainGuy)।

+0

यह सही है, धन्यवाद – Selecsosi

+0

धन्यवाद Takhion। @SuppressLint ("NewApi") जोड़ें :) – Nifhel

+0

उपयोग करें: ViewCompat.setAlpha (देखें, फ्लोट)। – TomerBu

3

अब आप इस क्रिया के लिए ViewCompat.setAlpha(View, float) का उपयोग कर सकते हैं।

+0

डॉक्टर से उद्धरण: "* एपीआई 11 से पहले इसका कोई प्रभाव नहीं पड़ेगा। *" – Pang

+0

ऐसी कोई विधि नहीं है। मैंने न्यूनतम एपीआई सेट 11 पर सेट किया है लेकिन इसमें ViewCompat.getAlpha (anyView) विधि है –

0
मेरा उत्तर के लिए

क्षमा करें, लेकिन यदि आप अल्फा चाहते हैं आप ViewCompat कक्षा

ViewCompat.setAlpha (देखें देखने के लिए, अल्फा नाव) का उपयोग कर सकते

ViewCompat appcompat v4

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