2013-05-26 9 views
9

मेरी अंग्रेज़ी के लिए खेद है।Android GLSurfaceView पारदर्शी पृष्ठभूमि सेट ZOrderonTop

मेरा काम https://github.com/harism/android_page_curl/

पर आधारित है अनुसंधान के कई घंटे के बाद, मैं कुछ समाधान मिल गया है, लेकिन सभी मुद्दों क्या मैं अपने आवेदन में है के लिए नहीं। मुझे एक GLSurfaceView के साथ कुछ परेशानी है। मुझे एक रिश्तेदार Layout, एक GLSurfaceView, और शीर्ष पर एक ओवरले के साथ पृष्ठभूमि मिली है।

<RelativeLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/background" 
    android:layout_width="match_parent" 
    android:background="@layout/backgroundrepeat" 
    android:layout_height="match_parent"> 
<com.m2y.foxprez.view.CurlView 
     xmlns:android="http://schemas.android.com/apk/res/android" 
     android:id="@+id/openglview" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent"/> 
<RelativeLayout 
     xmlns:android="http://schemas.android.com/apk/res/android" 
     android:id="@+id/overlay" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent"> 
</RelativeLayout> 

जब मैं अपने दृश्य init:

setEGLConfigChooser(8,8,8,8,16,0); 
setRenderer(renderer); 
getHolder().setFormat(PixelFormat.TRANSLUCENT); 
setRenderMode(GLSurfaceView.RENDERMODE_WHEN_DIRTY); 
setZOrderMediaOverlay(true); 

मेरी रेंडरर में:

public void onSurfaceCreated(GL10 gl, EGLConfig config) { 
    gl.glClearColor(0f, 0f, 0f, 0f); 
    gl.glShadeModel(GL10.GL_SMOOTH); 
    gl.glHint(GL10.GL_PERSPECTIVE_CORRECTION_HINT, GL10.GL_NICEST); 
    gl.glHint(GL10.GL_LINE_SMOOTH_HINT, GL10.GL_NICEST); 
    gl.glHint(GL10.GL_POLYGON_SMOOTH_HINT, GL10.GL_NICEST); 
    gl.glEnable(GL10.GL_LINE_SMOOTH); 
    gl.glDisable(GL10.GL_DEPTH_TEST); 
    gl.glDisable(GL10.GL_CULL_FACE); 
} 

public synchronized void onDrawFrame(GL10 gl) { 
    gl.glClearColor(0f,0f,0f,0f); 
    gl.glClear(GL10.GL_COLOR_BUFFER_BIT); 
    gl.glLoadIdentity(); 
} 

कई अनुसंधान के बाद, मैं इस समय इस परिणाम के साथ अवरुद्ध कर रहा हूँ:
साथ setZOrderOnTop, मुझे पृष्ठभूमि मिल गई है, लेकिन ओवरले नीचे है दृश्य
setZOrderMediaOverlay के साथ, मुझे ओवरले मिला है, लेकिन पृष्ठभूमि काला है।

कोई मेरी मदद कर सकता है?

+1

मुझे एक ही सटीक समस्या है, क्या आपको कभी समाधान मिला? – aez

+0

कोई समाधान मिला? – yarin

उत्तर

11

यह मेरे लिए काम किया:

final GLSurfaceView glView = (GLSurfaceView) findViewById(R.id.glView); 

glView.setZOrderOnTop(true); 
glView.setEGLConfigChooser(8, 8, 8, 8, 16, 0); 
glView.getHolder().setFormat(PixelFormat.RGBA_8888); 
glView.setRenderer(new MyRenderer()); 
glView.setRenderMode(GLSurfaceView.RENDERMODE_WHEN_DIRTY); 

यहाँ मिला: http://andrewhague.wordpress.com/2011/05/24/how-to-set-a-transparent-glsurfaceview/

+0

क्या आप अपने ओपनएल दृश्य पर कुछ ओवरले फ्रंट डाल सकते हैं? मुझे कुछ अन्य समाधान मिल गया है, जैसे ओपनग्ल में मेरा ओवरले करना, लेकिन अगर किसी के पास कोई समाधान है जो मेरी मदद कर सकता है संपादित करें: जब मैं ओवरले के बारे में बात करता हूं, तो मैं एक रिश्तेदार लेआउट के बारे में बात करता हूं (मेरे ओपनग्ल दृश्य का तत्व नहीं) – user2422856

+0

मैंने कोशिश नहीं की। असल में, मैंने विपरीत कोशिश करते हुए यह पाया। –

+0

मैंने इस कोड को मेरे कोड में करने की कोशिश की लेकिन यह काम नहीं कर रहा है, क्या शेडर्स स्थापित करने में कोई समस्या है? –

2

मैं एक GLSurfaceView की चोटी पर एक दृश्य के साथ एक ही बात को पूरा करना चाहते हैं और मैं सीमाओं के बिना एक समाधान नहीं मिला है। सबसे पहले, glView.setZOrderOnTop (सत्य) सही पारदर्शी पृष्ठभूमि देता है लेकिन दृश्य शीर्ष पर हमेशा होता है इससे कोई फर्क नहीं पड़ता कि ऑर्डरिंग दृश्यों का अनुक्रम क्या है। दूसरा, ZOrderOnTop के बिना दृश्य पदानुक्रम बनाए रखा जाता है लेकिन GLSurface पृष्ठभूमि रेंडरर में glClearColor (लाल, हरा, नीला, अल्फा) के साथ सेट किया गया काला या रंग है। दुर्भाग्य से, अल्फा तर्क जब जब तक

android:windowIsTranslucent="true" 

इस पद्धति का उपयोग करते हैं और इस के साथ समस्या यह है कि आप ओएस दृश्य में एक छेद पंच के लिए नहीं चाहते हो सकता है है कोई प्रभाव नहीं है। OpenGL का उपयोग करके अधिक एनिमेटेड UI के लिए इसे आसानी से पूरा करने का एक तरीका होना चाहिए। मैंने इस साइट और दूसरों को समाधान खोजने के बिना खोजा है।

1

मैं एक ही समस्या का काम कर रहा हूं। मैंने पाया आप

setRenderer(...); 

गुड लक के लिए

setZOrderOnTop(true); 
getHolder().setFormat(PixelFormat.RGBA_8888); 
कॉल करने से पहले

कॉल करने के लिए है कि!

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