Android में दृश्य के लिए अपारदर्शिता (अल्फा) कैसे सेट करें


211

मेरे पास निम्नलिखित के रूप में एक बटन है:

<Button 
     android:text="Submit" 
     android:id="@+id/Button01" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content">
</Button>

मेरी onCreate()घटना में, मैं इस तरह से Button01 कॉल कर रहा हूं:

setContentView(R.layout.main);

View Button01 = this.findViewById(R.id.Button01);
Button01.setOnClickListener(this);

आवेदन में एक पृष्ठभूमि है, और मैं इस सबमिट बटन पर एक अस्पष्टता सेट करना चाहता हूं। मैं इस दृश्य के लिए एक अस्पष्टता कैसे निर्धारित कर सकता हूं? क्या यह कुछ ऐसा है जिसे मैं जावा साइड पर सेट कर सकता हूं, या मैं main.xml फ़ाइल में सेट कर सकता हूं?

जावा पक्ष पर मैंने कोशिश की Button01.mutate().SetAlpha(100), लेकिन इसने मुझे एक त्रुटि दी।

जवाबों:


64

मुझे TextView के साथ इसी तरह की समस्या होने पर मैंने केवल आपका प्रश्न पाया। मैं TextView और ओवरराइडिंग को बढ़ाकर इसे हल करने में सक्षम था onSetAlpha। शायद आप अपने बटन के साथ कुछ इसी तरह की कोशिश कर सकते हैं:

import android.content.Context;
import android.util.AttributeSet;
import android.widget.TextView;

public class AlphaTextView extends TextView {

  public AlphaTextView(Context context) {
    super(context);
  }

  public AlphaTextView(Context context, AttributeSet attrs) {
    super(context, attrs);
  }

  public AlphaTextView(Context context, AttributeSet attrs, int defStyle) {
    super(context, attrs, defStyle);
  }

  @Override
  public boolean onSetAlpha(int alpha) {
    setTextColor(getTextColors().withAlpha(alpha));
    setHintTextColor(getHintTextColors().withAlpha(alpha));
    setLinkTextColor(getLinkTextColors().withAlpha(alpha));
    return true;
  }
}

12
धन्यवाद, इससे मुझे भी मदद मिली। हालाँकि यह हास्यास्पद है कि एक TextView और एक ImageView अल्फा को सेट करने के विभिन्न तरीके हैं।
गेराल्डो नैस्केन्टो

इससे मुझे दूसरे संसाधन के बिना छवि दृश्य पर क्लिक प्रभाव लागू करने में भी मदद मिली। Thanx !!
स्काईजेक

568

मैं हर किसी की से चकित हूँ ज्यादा अधिक जटिल जवाब।

एक्सएमएल

आप अपने xml में बटन की रंग परिभाषा (या किसी अन्य दृश्य) में अल्फा को बहुत आसानी से परिभाषित कर सकते हैं:

android:color="#66FF0000"    // Partially transparent red

उपरोक्त उदाहरण में, रंग आंशिक रूप से पारदर्शी लाल होगा।

एक दृश्य के रंग को परिभाषित करते समय, प्रारूप #RRGGBBया तो हो सकता है या #AARRGGBB, AAहेक्स अल्फा मान कहां है। FFपूरी तरह से अपारदर्शी 00होगा और पूर्ण पारदर्शी होगा।

गतिशील रूप से

यदि आपको अपने कोड में अस्पष्टता को गतिशील रूप से बदलना है, तो उपयोग करें

myButton.getBackground().setAlpha(128);  // 50% transparent

जहां INT 0(पूरी तरह से पारदर्शी) से 255(पूरी तरह से अपारदर्शी) तक होता है।


18
यह अभी भी समाधान नहीं है यदि आपके पास एक यौगिक है
माइकेल

6
देखने के आधे पारदर्शी हरे रंग को सेट करें: <RelativeLayout Android: पृष्ठभूमि = "# 8700FF00" />
जॉनी

2
दृश्य में android:colorविशेषता नहीं है ।
रॉनी

6
@moshersan आप Android में रंग सेट कर सकते हैं: पृष्ठभूमि संपत्ति ही!
धीरज भास्कर

1
यह गलत है backgroundअस्पष्टता अस्पष्टता नहीं है view। कई उपयोग मामलों में समतुल्य नहीं
Jocky Doe

215

मुझे लगता है कि आप पहले से ही उत्तर पा सकते हैं, लेकिन यदि (और अन्य डेवलपर्स के लिए), तो आप इसे इस तरह से कर सकते हैं:

btnMybutton.getBackground().setAlpha(45);

यहां मैंने अपारदर्शिता को 45 पर सेट किया है। आप मूल रूप से इसे 0 (पूरी तरह से पारदर्शी) से 255 (पूरी तरह से अपारदर्शी) के बीच किसी भी चीज़ से सेट कर सकते हैं


5
यह केवल API 11+ डेवलपर.
ग्रीम

8
@Gememe आपने दृश्य वर्ग पर setAlpha पद्धति से लिंक किया है, लेकिन पोस्ट ड्रा करने योग्य वर्ग पर setAlpha का उपयोग कर रहा है। GetBackground विधि एक ड्रॉबल देता है। यह विधि एपीआई स्तर 1 से है। developer.android.com/reference/android/graphics/drawable/…
Geekygecko

ओह दिलचस्प! मैंने वह नहीं देखा। क्या इसका मतलब यह होगा कि पृष्ठभूमि पूरी तरह से पारदर्शी होने के बावजूद पाठ पूरी तरह से दिखाई दे रहा था।
ग्रीम

-1 यह मेरे मामले में काम नहीं करता है, जहां मेरी पृष्ठभूमि का चयन करने योग्य है।
माइक एस

3
यह महान काम करता है, लेकिन एक साइड इफेक्ट के साथ: मेरे पास एक ही पृष्ठभूमि को साझा करने वाले कई बटन हैं और वे सभी पारदर्शी हो जाते हैं! :(
मार्क

66

मैं आपको क्या सुझाव दूंगा कि आप अपने रंग में एक कस्टम ARGB रंग बना सकते हैं। जैसे:

<resources>
<color name="translucent_black">#80000000</color>
</resources>

फिर अपनी बटन पृष्ठभूमि को उस रंग पर सेट करें:

android:background="@android:color/translucent_black"

यदि आप बटन के आकार के साथ खेलना चाहते हैं, तो एक और बात यह है कि आप शेप ड्रा करने योग्य संसाधन बना सकते हैं, जहाँ आप गुणों को सेट करते हैं, जो बटन की तरह दिखना चाहिए:

फ़ाइल: res / drawable / rounded_corner_box.xml

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="rectangle">
    <gradient
        android:startColor="#80000000"
        android:endColor="#80FFFFFF"
        android:angle="45"/>
    <padding android:left="7dp"
        android:top="7dp"
        android:right="7dp"
        android:bottom="7dp" />
    <corners android:radius="8dp" />
</shape>

फिर बटन पृष्ठभूमि के रूप में उपयोग करें:

    android:background="@drawable/rounded_corner_box"

6
यदि आप 40% अपारदर्शिता से एक हेक्स मान के लिए गुप्त संघर्ष कर रहे हैं, तो आप Google खोज का उपयोग कर सकते हैं "255 से हेक्स का 40%" 40% के लिए हेक्स मूल्य देता है
स्कॉटलैब

54

Android डॉक्स के अनुसार, अल्फा 0 और 1 के बीच का मान है। इसलिए इसे सेट करने के लिए कुछ इस तरह से उपयोग करें:

View v;
v.setAlpha(.5f);

यह केवल मेरे लिए पूरे दृष्टिकोण के लिए काम किया है ... मैंने सूची-वस्तु पर कोशिश की है, जिसमें कई पाठ भी हैं। इस एकल पंक्ति ने दृश्य और उसके बच्चों पर अल्फ़ाज़ सेट करने में मदद की। धन्यवाद @ cange1
Alyas

केवल वही चीज जो मेरे लिए भी काम करती है। मुझे पता है कि यह पुराना है, लेकिन धन्यवाद @ cange1
मस्तफुंड

50

ऊपर से बहुत आसान। डिफ़ॉल्ट अल्फा विशेषता बटन के लिए है

android:alpha="0.5"

पूर्ण पारदर्शी के लिए सीमा 0 और पूर्ण अस्पष्टता के लिए 1 के बीच है।


यह वही है जो मैं देख रहा था, कमाल 21 पर परीक्षण किया गया
फर्नांडो टॉरेस

बिल्कुल सही जवाब !!
हैरी। नईम

18
android:background="@android:color/transparent"

उपरोक्त कुछ ऐसा है जो मुझे पता है ... मुझे लगता है कि एक कस्टम बटन वर्ग बनाना सबसे अच्छा विचार है

एपीआई स्तर 11
हाल ही में मैं इस एंड्रॉइड में आया था : अल्फा एक्सएमएल विशेषता जो 0 और 1. के बीच मान लेता है। इसी पद्धति का सेटअल्फा (फ्लोट) है


हाय जोसनिधिन। आपके जवाब के लिए धन्यवाद। लेकिन यह पूरे बटन को पूरी तरह से पारदर्शी बनाता है। मैं जो देख रहा हूं वह बटन पर कुछ अस्पष्टता (शायद अल्फा मान के माध्यम से) डाल रहा है।
ncakmak

यह एक फ्लोट है, इसलिए आप उदाहरण के लिए बीटा 0 और 1, 0.5 मान का उपयोग कर सकते हैं।
स्टैकऑवरफ्लो 19

@StackOverflowed - मेरा मानना ​​है कि ncakmak का मतलब पहला समाधान था। @android:color/transparentबैकग्राउंड के रूप में सेट करना वास्तव में दृश्य को पूरी तरह से पारदर्शी बना देगा। @android:alpha- भाग एक परिशिष्ट हो रहा है।
katzenhut

17

हालांकि btnMybutton.getBackground().setAlpha(45);यह अच्छा विचार है, यह सिर्फ पृष्ठभूमि पर अल्फा को लागू करता है और पूरे दृश्य को नहीं।

यदि आप btnMybutton.setAlpha(0.30f);इसके बजाय उपयोग को देखने के लिए अल्फ़ा लागू करना चाहते हैं । यह देखने के लिए अपारदर्शिता लागू करता है। यह 0 और 1 के बीच का मान स्वीकार करता है।

डॉक्टर कहते हैं:

दृश्य की अस्पष्टता निर्धारित करता है। यह 0 से 1 तक का मान है, जहां 0 का मतलब है कि दृश्य पूरी तरह से पारदर्शी है और 1 का मतलब है कि दृश्य पूरी तरह से अपारदर्शी है। यदि यह दृश्य सत्य लौटने के लिए onSetAlpha (int) को ओवरराइड करता है, तो यह दृश्य स्वयं को लागू करने के लिए ज़िम्मेदार है। अन्यथा, इस विधि को कॉल करना setLayerType (int, android.graphics.Paint) को कॉल करने और हार्डवेयर परत सेट करने के बराबर है। ध्यान दें कि अल्फ़ा को पारभासी मान पर सेट करना (0 <अल्फ़ा <1) में प्रदर्शन निहितार्थ हो सकते हैं। अल्फा प्रॉपर्टी को संयमित और क्षणिक रूप से इस्तेमाल करना सबसे अच्छा है, जैसा कि फीका एनिमेशन।


7

मैंने आईसीएस / जेबी के साथ इस समस्या में भाग लिया है क्योंकि होलो थीम के लिए डिफ़ॉल्ट बटन में ऐसी छवियां होती हैं जो थोड़ी पारदर्शी होती हैं। एक पृष्ठभूमि के लिए यह विशेष रूप से ध्यान देने योग्य है।

जिंजरब्रेड बनाम आईसीएस +:

जिंजरब्रेड आईसीएस

प्रत्येक रिज़ॉल्यूशन के लिए सभी ड्रॉएबल स्टेट्स और इमेज को कॉपी करना और ट्रांसपेरेंट इमेज को सॉलिड बनाना एक दर्द है, इसलिए मैंने एक डर्टियर सॉल्यूशन का विकल्प चुना है: बटन को उस होल्डर में लपेटें जिसमें वाइट बैकग्राउंड हो। यहाँ एक कच्चा XML ड्रॉबल (ButtonHolder) है जो ठीक यही करता है:

आपकी XML फ़ाइल

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
              style="@style/Content">
  <RelativeLayout style="@style/ButtonHolder">
      <Button android:id="@+id/myButton"
              style="@style/Button"
              android:text="@string/proceed"/>
    </RelativeLayout>
</LinearLayout>

ButtonHolder.xml

<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
  <item>
    <shape android:shape="rectangle">
      <solid android:color="@color/white"/>
    </shape>
  </item>

</layer-list>

styles.xml

.
.
.      
  <style name="ButtonHolder">
    <item name="android:layout_height">wrap_content</item>
    <item name="android:layout_width">wrap_content</item>
    <item name="android:background">@drawable/buttonholder</item>
  </style>

  <style name="Button" parent="@android:style/Widget.Button">
    <item name="android:layout_height">wrap_content</item>
    <item name="android:layout_width">wrap_content</item>
    <item name="android:textStyle">bold</item>
  </style>
.
.
.

हालाँकि, इसका परिणाम सफ़ेद बॉर्डर के रूप में दिखाई देता है क्योंकि होलो बटन छवियों में प्रेस किए गए स्थान के लिए हाशिये शामिल हैं:

बहुत अधिक सफेद बहुत अधिक सफेद दबाया हुआ

इसलिए सफ़ेद पृष्ठभूमि को एक मार्जिन देने के लिए समाधान (4dp ने मेरे लिए काम किया) और गोल कोनों (2dp) को पूरी तरह से सफेद करने के लिए अभी तक बटन को ठोस बनाया है:

ButtonHolder.xml

<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">

  <item>
    <shape android:shape="rectangle">
      <solid android:color="@android:color/transparent"/>
    </shape>
  </item>

  <item android:top="4dp" android:bottom="4dp" android:left="4dp" android:right="4dp">
    <shape android:shape="rectangle">
      <solid android:color="@color/white"/>
      <corners android:radius="2dp" />
    </shape>
  </item>

</layer-list>

अंतिम परिणाम इस तरह दिखता है:

कोई सफेद नहीं कोई सफेद दबाया हुआ

आपको इस शैली को v14 + के लिए लक्षित करना चाहिए, और जिंजरब्रेड / हनीकॉम्ब के लिए इसे ट्वीक या बाहर करना चाहिए क्योंकि उनकी मूल बटन छवि का आकार आईसीएस और जेबी से भिन्न होता है (जैसे जिंजरब्रेड बटन के पीछे यह सटीक शैली बटन के नीचे एक छोटे से सफेद रंग में परिणाम होती है)।


7

एक दृश्य के लिए आप निम्नलिखित द्वारा अस्पष्टता निर्धारित कर सकते हैं।

view_name.setAlpha(float_value);

संपत्ति view.setAlpha(int)11. से अधिक एपीआई संस्करण के लिए पदावनत है इसलिए, संपत्ति .setAlpha(0.5f)का उपयोग किया जाता है।


6

API के लिए <11 textView रंग के लिए मैंने निम्नलिखित किया:

int textViewColor = textView.getTextColors().getDefaultColor(); 
textView.setTextColor(Color.argb(128, Color.red(textViewColor), Color.green(textViewColor), Color.blue(textViewColor))); //50% transparent

थोड़ा बोझिल, लेकिन अरे, यह काम करता है :-)


1

मुझे पता है कि इसके पास पहले से ही उत्तरों का एक गुच्छा है, लेकिन मैंने पाया कि बटनों के लिए अपना स्वयं का .xml चयनकर्ता बनाना आसान है और कहा कि बटन की पृष्ठभूमि पर सेट करें। इस तरह से आप इसे दबाए जाने या सक्षम होने पर भी स्थिति बदल सकते हैं। यहाँ एक त्वरित स्निपेट है जिसका मैं उपयोग करता हूं। यदि आप किसी भी रंग में पारदर्शिता जोड़ना चाहते हैं, तो एक अग्रणी हेक्स मान (#XXcccccc) जोड़ें। (XX == "रंग का अल्फा")

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_pressed="true" >
        <shape>
            <solid
                android:color="#70c656" />
            <stroke
                android:width="1dp"
                android:color="#53933f" />
            <corners
                android:radius="4dp" />
            <padding
                android:left="10dp"
                android:top="10dp"
                android:right="10dp"
                android:bottom="10dp" />
        </shape>
    </item>
    <item>
        <shape>
            <gradient
                android:startColor="#70c656"
                android:endColor="#53933f"
                android:angle="270" />
            <stroke
                android:width="1dp"
                android:color="#53933f" />
            <corners
                android:radius="4dp" />
            <padding
                android:left="10dp"
                android:top="10dp"
                android:right="10dp"
                android:bottom="10dp" />
        </shape>
    </item>
</selector>
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.