2012-01-31 4 views
33

एंड्रॉइड पर प्री-एसडीके -11 पर दृश्य के पारदर्शिता (अल्फा) को मैं कैसे बदल सकता हूं?एंड्रॉइड पर प्री-एसडीके -11 पर एक दृश्य के पारदर्शिता (अल्फा) को मैं कैसे बदल सकता हूं?

कुछ पारदर्शिता के साथ पृष्ठभूमि रंग का उपयोग करने का सुझाव देने से पहले, कृपया ध्यान दें कि इस विधि में दृश्य के सभी तत्व शामिल नहीं हैं जैसे कि बटन का टेक्स्ट या व्यू समूह के बच्चे के दृश्य।

उत्तर

15

में संपादित करना सभी एपीआई संस्करणों के लिए !!!

पिछला जवाब

मैं वास्तव में इस तरह की समस्या का सामना करना पड़ा जब एक जटिल लेआउट पर गतिशील रूप से अल्फा सेट करने के लिए चाहता था। मैंने onSetAlpha() का ओवरराइड बनाया और एक और रिकर्सिव फ़ंक्शन जोड़ा जो पृष्ठभूमि छवि, ड्रॉबल्स और टेक्स्ट रंगों के लिए हर तरह के दृश्य की जांच करता है।

@Override 
public boolean onSetAlpha(int alpha) 
{ 
    return onSetAlpha(alpha, theLayoutYouWantToSetAlphaTo); 
} 

public boolean onSetAlpha(int alpha, View view) 
{ 
    if (view instanceof ViewGroup) 
    { 
     for (int i = 0; i < ((ViewGroup) view).getChildCount(); i++) 
     { 
      onSetAlpha(alpha, ((ViewGroup) view).getChildAt(i)); 
      if (((ViewGroup) view).getBackground() != null) ((ViewGroup) view).getBackground().setAlpha(alpha); 
     } 
    } 
    else if (view instanceof ImageView) 
    { 
     if (((ImageView) view).getDrawable() != null) ((ImageView) view).getDrawable().setAlpha(alpha); 
     if (((ImageView) view).getBackground() != null) ((ImageView) view).getBackground().setAlpha(alpha); 
    } 
    else if (view instanceof TextView) 
    { 
     ((TextView) view).setTextColor(((TextView) view).getTextColors().withAlpha(alpha)); 
     if (((TextView) view).getBackground() != null) ((TextView) view).getBackground().setAlpha(alpha); 
    } 
    else if (view instanceof EditText) 
    { 
     ((EditText) view).setTextColor(((EditText) view).getTextColors().withAlpha(alpha)); 
     if (((EditText) view).getBackground() != null) ((EditText) view).getBackground().setAlpha(alpha); 
    } 
    return true; 
} 

आप अन्य प्रकार के विचारों को जोड़ सकते हैं जैसा आपको चाहिए।

+3

दुख की बात है आप नौल्डैंड्रॉइड विधि का उपयोग नहीं कर सकते हैं। यदि आप 'ऑब्जेक्टएनिमीटर.ऑफ्लोटैट (माईव्यू, "अल्फा", 0.1 एफ, 0.0 एफ) जैसे कुछ करते हैं .setDuration (10) .start();' यह सिर्फ कहता है "मूल्य प्रकार फ्लोट के साथ myview के लिए सेटर गुण अल्फा नहीं मिला । "। – Timmmm

+1

क्या आपने इसे देखने का प्रयास किया है? http://jakewharton.com/advanced-pre-honeycomb-animation/ –

+0

'int अल्फा' का आपका पैरामीटर [0, 255] पर बंद है, लेकिन [0.0f, 1.0f] नहीं, है ना? – SilentKnight

47

एक AlphaAnimation उपयोग करके देखें: http://developer.android.com/reference/android/view/animation/AlphaAnimation.html


/* आदेश कार्ड फीका प्राप्त करने के लिए एनीमेशन का उपयोग करने के लिए है। */

AlphaAnimation alpha = new AlphaAnimation(0.7F, 0.7F); 
alpha.setDuration(0); // Make animation instant 
alpha.setFillAfter(true); // Tell it to persist after the animation ends 
view.startAnimation(alpha); 
+0

+1 .. लेकिन यह एक इष्टतम समाधान नहीं है –

+0

@ शेरिफेलखतिब यह "इष्टतम" समाधान क्यों नहीं होगा, और इसके अलावा, आप ओपी की तुलना में इस मामले में "इष्टतम" कैसे परिभाषित करते हैं ? –

+0

वाह यह पुराना है। मुझे लगता है कि मैं कुछ ऐसी चीज में सोच रहा था जिसमें सीधे अल्फा के साथ चित्रण शामिल था। @ Navin के उत्तर के आस-पास कुछ जो मुझे लगता है कि +1 भी योग्य है। –

0

आप दृश्य के सभी रंगों में अल्फा सेट कर सकते हैं। (जैसे बटन का टेक्स्ट या दृश्य समूह के बच्चे के दृश्य)। उन्हें रंग xml में बनाएं और सभी दृश्यों में उपयोग करें।

आप दृश्यों से रंगों को बार-बार पढ़ सकते हैं और उन्हें अल्फा जोड़ सकते हैं और उन्हें वापस सेट कर सकते हैं।

आप एक नई गतिविधि के मुख्य दृश्य के रूप में दृश्य बना सकते हैं। Nine Old Androids बुलाया नीचे दिए गए उदाहरण एंड्रॉयड पूर्व SDK11 के लिए संदर्भित करता है, लेकिन मैं सिर्फ एक आश्चर्यजनक महान पुस्तकालय बारे में पता चला, आश्चर्यजनक बात यह है एंड्रॉयड 3.0 के सभी एनीमेशन क्षमताओं सक्षम कर रहा है - तो के रूप में How do I create a transparent Activity on Android?

9

आप() विधि विस्तार कर सकते हैं विचारों आकर्षित और का उपयोग canvas.saveAlphaLayer()

public void draw(Canvas canvas) { 
    canvas.saveLayerAlpha(null, alphaValue, ALL_SAVE_FLAG); 
    super.draw(canvas); 
    canvas.restore(); 
} 
+1

यह समाधान वास्तव में मेरे मुकाबले बेहतर है, मैंने इसका इस्तेमाल किया जो मैंने ऊपर सुझाया था। – Rotemmiz

+0

मेरे लिए, यह केवल तभी काम करता है जब मैं अंतिम पंक्ति को हटा देता हूं: 'canvas.restore(); '। शायद ऐसा इसलिए है क्योंकि मैं अभिभावक दृश्य से कुछ बाल परिवर्तन कर रहा हूं। –

+0

अंतिम पंक्ति को हटाने के लिए डिट्टो: canvas.restore(); पूरी तरह से अन्यथा काम करता है। –

26

NineOldAndroids की ViewHelper है कि मैं क्या उपयोग करते हैं, तो वह एक स्थिर सहायक वर्ग और एक असली मणि है! यहां कई लोग नाइनऑल्ड एंड्रॉइड की सलाह देते हैं लेकिन मैंने व्यूहेल्पर का कोई उल्लेख नहीं देखा है। इसका उपयोग करना वास्तव में आसान है।

import com.nineoldandroids.view.ViewHelper; 
... 

ViewHelper.setAlpha(myView, .2f); 

आप इसका उपयोग जब एनिमेशन के लिए स्थापित करने या अपने यूआई के निर्माण एक्स, वाई आदि, बहुत आसान जैसे अन्य गुणों को सेट कर सकते हैं। समुदाय के साथ अपना काम साझा करने के लिए जेक व्हार्टन को बहुत धन्यवाद! समाधान के लिए

+0

नौल्डैंड्रॉइड का उल्लेख करने और इसे काम करने के लिए कोड देने के लिए धन्यवाद। –

+0

यह एक छवि दृश्य पर 2.3.7 डिवाइस पर मेरे लिए काम नहीं कर रहा है। कोई सुझाव? –

+1

मैं पुष्टि करता हूं, यह 2.3 डिवाइस पर काम कर रहा है। – jskierbi

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