没有setZOrderonTop的Android GLSurfaceView透明背景

use*_*856 12 android opengl-es glsurfaceview android-relativelayout

对不起我的英语不好.

我的工作基于https://github.com/harism/android_page_curl/

经过几个小时的研究,我找到了一些解决方案,但不是我在申请中遇到的所有问题.我在使用GLSurfaceView时遇到了一些麻烦.我有一个背景,有一个relativeLayout,一个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>
Run Code Online (Sandbox Code Playgroud)

当我开始我的观点时:

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

在我的渲染器中:

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();
}
Run Code Online (Sandbox Code Playgroud)

经过多次研究,我目前被阻止了这个结果:
使用setZOrderOnTop,我有背景,但叠加层在视图下.
使用setZOrderMediaOverlay,我有叠加层,但背景为黑色.

有人可以帮帮我吗?

Dar*_*añé 13

这对我有用:

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);
Run Code Online (Sandbox Code Playgroud)

在这里找到:http://andrewhague.wordpress.com/2011/05/24/how-to-set-a-transparent-glsurfaceview/