Android,在布局中创建透明的sub-GLSurfaceView?

7

可能是重复问题:
Android OpenGL ES透明背景

我想在普通的2D UI布局屏幕上显示一些3D对象。

2D UI屏幕具有背景图像,并且GLSurfaceView是内容布局的子项。

我尝试了ApiDemos示例中半透明GLSurfaceView的相同技术,

但GLSurfaceView会清除所有内容并显示黑色背景。


<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"    
    android:background="@drawable/my_background_image"
>

...

<android.opengl.GLSurfaceView android:id="@+id/glview"  
    android:layout_width="fill_parent"
    android:layout_height="300px"
    android:windowIsTranslucent="true" (i'm not sure this is right)
/>
</LinearLayout>

setContentView(R.layout.main);
...
glview = (GLSurfaceView) findViewById(R.id.glview);
glview.setEGLConfigChooser(8, 8, 8, 8, 16, 0);
glview.getHolder().setFormat(PixelFormat.TRANSLUCENT);
glview.setRenderer(this);
...
gl.glClearColor(0, 0, 0, 0);
...

在这种情况下,我能保留底层的背景图片吗?
1个回答

25

这对我解决了问题:

    glview = (GLSurfaceView)findViewById(R.id.glview); 

    glview.setEGLConfigChooser(8,8,8,8,16,0);

    glview.setRenderer(new MyRenderer(this));
    glview.getHolder().setFormat(PixelFormat.TRANSLUCENT);

    // this made it work for me - works only from sdk level 6 on, though....
    glview.setZOrderOnTop(true);

2
@P.Melch 这使得GlSurfaceView在所有视图的顶部。现在我无法在GlSurfaceView上设置另一个视图。是否有其他方法使GlSurfaceView透明? - Ajay S
@P.Melch 同样的问题 Zorder-top 会使其他视图在 GLsurfaceview 后面。 - ask4solutions
据我所知,使用SurfaceView的唯一方法是选择前置或后置摆放。如果您想要更复杂的布局,我认为TextureView是适合您的(尽管需要API 14及以上版本)。 - P.Melch

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接