कैसे सरफेसव्यू को पारदर्शी बनाया जाए


83

हैलो, मैं अपने ड्रॉइंगसर्फ़ दृश्य को पारदर्शी बनाना चाहता हूं। मैंने बहुत सी कोशिश की लेकिन यह काम नहीं कर रहा है।

यहाँ मेरी सतह को पारदर्शी बनाने के लिए मेरा xml कोड है

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" >

    <FrameLayout
        android:layout_width="fill_parent"
        android:layout_height="fill_parent" >

        <ImageView
            android:id="@+id/imageView1"
            android:layout_width="fill_parent"
            android:layout_height="fill_parent"
            android:src="@drawable/icon" >
        </ImageView>

        <LinearLayout
            android:id="@+id/linearLayout1"
            android:layout_width="fill_parent"
            android:layout_height="fill_parent"
            android:background="#00000000" >

            <codewalla.android.drawings.DrawingSurface
                android:id="@+id/drawingSurface"
                android:layout_width="fill_parent"
                android:layout_height="fill_parent" >
            </codewalla.android.drawings.DrawingSurface>
        </LinearLayout>
    </FrameLayout>

    <LinearLayout
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal" >

        <Button
            android:id="@+id/colorRedBtn"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:layout_weight="10"
            android:onClick="onClick"
            android:text="R" />

        <Button
            android:id="@+id/colorBlueBtn"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:layout_weight="10"
            android:onClick="onClick"
            android:text="G" />

        <Button
            android:id="@+id/colorGreenBtn"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:layout_weight="10"
            android:onClick="onClick"
            android:text="B" />

        <Button
            android:id="@+id/undoBtn"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:layout_weight="10"
            android:onClick="onClick"
            android:text="U" />

        <Button
            android:id="@+id/redoBtn"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_weight="10"
            android:onClick="onClick"
            android:text="R" />
    </LinearLayout>

</RelativeLayout>

जवाबों:


214

निर्माता में यह कोशिश करें:

SurfaceView sfvTrack = (SurfaceView)findViewById(R.id.sfvTrack);
sfvTrack.setZOrderOnTop(true);    // necessary
SurfaceHolder sfhTrackHolder = sfvTrack.getHolder();
sfhTrackHolder.setFormat(PixelFormat.TRANSPARENT);

9
वाह, मैं इस पर हथौड़ा मार रहा था, पहले से ही पारदर्शी पिक्सेल प्रारूप और साथ ही XML में एक पारदर्शी पृष्ठभूमि जोड़ रहा था। यह पता चला है कि 'setZOrderOnTop (true)' कॉल CRITICAL है। इसे पोस्ट करने के लिए धन्यवाद, मैंने कभी ऐसा करने की कोशिश नहीं की होगी।
प्रोजेक्टजॉर्नीमैन

43
यह setZOrderOnTop () को छोड़कर महान काम करता है इसका मतलब है कि आप इस सरफेसव्यू के शीर्ष पर कोई भी ग्राफिक्स नहीं रख सकते हैं, जो दुर्भाग्यपूर्ण है। = \
डीसी

2
लेकिन यह लेआउट पर अन्य सभी विचारों को शामिल करता है, इसका मतलब है कि अगर मैं सतह के दृश्य को आकर्षित करता हूं तो किसी भी छवि / बटन को चित्रित किया जाएगा। मैं इस मुद्दे से कैसे बाहर निकल सकता हूं?
स्काईजेक

मेरे पक्ष में कोशिश की। 4.0 लेकिन 2.3 पर बढ़िया काम करता है।
wayne_bai

2
ग्रैफ़िका में "मल्टी-सतही परीक्षण" दृश्य यूआई परत के साथ मिश्रित तीन पारदर्शी ओवरलैपिंग भूतल व्यू को प्रदर्शित करता है। github.com/google/grafika/blob/master/src/com/android/grafika/… । एफडब्ल्यूआईडब्ल्यू, "कंस्ट्रक्टर में इसे आज़माएं" शायद "इस में कोशिश करें" को पढ़ना चाहिए onCreate(), और आरजीबी 565 से आरजीबी 88 को पिक्सेल प्रारूप बदलना भी बहुत आवश्यक है।
fadden

8
sfvTrack.setZOrderOnTop(true); 

विंडो के ऊपर सरफेस व्यू को जगह देगा, जिसका अर्थ है कि आप सतह के शीर्ष पर आइटम नहीं जोड़ सकते।

यदि आप सतह के दृश्य के शीर्ष पर विचार जोड़ना चाहते हैं; आपको उपयोग करने पर विचार करना चाहिए:

setZOrderMediaOverlay(true);

बजाय। यह इस सतह दृश्य को अन्य सतह दृश्य के शीर्ष पर रखता है, लेकिन फिर भी खिड़की के पीछे, आपको सतह दृश्य के शीर्ष पर अन्य दृश्य दृश्य जोड़ने की अनुमति देता है।


4

क्या आपका DrawingSurface और SurfaceView का विस्तार है?

ऐसा करने का कोई तरीका नहीं है जिसे करने के लिए आप इसे करना चाहते हैं। सतह दृश्य के यांत्रिकी ऐसे हैं कि इसके पीछे कुछ भी दिखाई नहीं दे सकता है। (यहां देखें उत्तर http://groups.google.com/group/android-developers/browse_thread/thread/8d88ef9bb22da574 )

मैंने सरफेसव्यू का विस्तार करने वाले कस्टम दृश्य के साथ आपकी पदानुक्रम का परीक्षण किया और मुझे आपकी समस्या दिखाई दी। यदि मैं एक कस्टम दृश्य पर स्विच करता हूं जो केवल दृश्य बढ़ाता है, तो मुझे पारदर्शिता मिल सकती है।


धन्यवाद श्लोक, आप सही हैं, लेकिन इसके पीछे कैमरे का पूर्वावलोकन करने की आवश्यकता है और यह मेरी ड्राइंग सतह है, इसलिए मैं कैमरे के पूर्वावलोकन पर आकर्षित करना चाहता हूं
सुनील पांडे

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