2013-11-27 65 views
9

我的應用程序由圖像背景組成(從後到前),然後是包含3D對象和頂部2個按鈕的glSurfaceView。我希望GLSurfaceView的背景透明,並看到背後的圖像。如何在透明背景的glSurfaceView上放置視圖?

我已經試過兩種解決方案,但他們都不是令人滿意的:

mGLSurfaceView = new GLSurfaceView(mContext); 
mGLSurfaceView.setEGLContextClientVersion(2);   
mGLSurfaceView.setEGLConfigChooser(8, 8, 8, 8, 16, 0); 
mGLSurfaceView.getHolder().setFormat(PixelFormat.TRANSLUCENT); 
mGLSurfaceView.setZOrderOnTop(true); 
mGLSurfaceView.setRenderer(mRenderer); 

在這種情況下,我可以看到背景,但3D物體浮在所有其他佈局的頂部,有時隱藏按鈕。

mGLSurfaceView = new GLSurfaceView(mContext); 
mGLSurfaceView.setEGLContextClientVersion(2);   
mGLSurfaceView.setEGLConfigChooser(8, 8, 8, 8, 16, 0); 
mGLSurfaceView.getHolder().setFormat(PixelFormat.TRANSLUCENT); 
mGLSurfaceView.setZOrderMediaOverlay(true); 
mGLSurfaceView.setRenderer(mRenderer); 

在這種情況下,我可以看到按鈕,但GLSurfaceView不再透明,我看不到圖像背景。 我解析了所有其他主題,但沒有一個給我任何滿意的答案。

+1

我也對這個問題的答案進行討論。據我所知,在某些設備上根本不可能。在其他設備上,第二種情況確實會導致透明的SurfaceView。 –

+0

奇怪的是我在Android 2.3上沒有這個問題。只有4. * –

+0

這裏的任何幫助將sweeeeet – Gerard

回答

1
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); 

由SO後給出: Android GLSurfaceView transparent background without setZOrderonTop 和原來的博客文章: How to set a transparent GLSurfaceView

+0

我試過那個,它不適合我。 – Gerard

+0

終於!謝謝!星期五整天都在試圖弄清楚這一點。 –

+0

很高興爲您解答,TJ Biddle –

0

setZOrderOnTop()的作品,但它意味着你不能把任何圖形這個SurfaceView,上面這是不幸的。