Android GLSurfaceView fondo transparente sin setZOrderonTop
Lo siento por mi inglés.
Mi trabajo se basa en https://github.com/harism/android_page_curl/
- Problemas de Android para convertir ViewGroup con niños en mapa de bits
- Archivo de diseño - Posicionamiento de un elemento a la derecha de otro elemento (Android)
- Android: configurar el diseño de fondo de forma programática
- Android: extiende Linearlayout, pero necesita lo mismo para RelativeLayout. Código duplicado inevitable?
- ¿Cómo mostrar un TextView debajo de otro en Android con archivos XML?
Después de muchas horas de investigación, he encontrado algunas soluciones, pero no para todos los problemas que tengo en mi aplicación. Tengo algunos problemas con GLSurfaceView. Tengo un fondo con un relativoLayout, un GLSurfaceView, y una superposición en tapa.
<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>
Cuando init mi opinión:
setEGLConfigChooser(8,8,8,8,16,0); setRenderer(renderer); getHolder().setFormat(PixelFormat.TRANSLUCENT); setRenderMode(GLSurfaceView.RENDERMODE_WHEN_DIRTY); setZOrderMediaOverlay(true);
En mi renderizador:
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(); }
Después de múltiples investigaciones, actualmente estoy bloqueado con este resultado:
Con setZOrderOnTop, tengo fondo, pero la superposición está bajo la vista.
Con setZOrderMediaOverlay, tengo la superposición, pero el fondo es negro.
¿Puede ayudarme alguien?
- Android arregla el diseño con la altura en porcentaje
- Listview error: "Su contenido debe tener un ListView cuyo atributo id es 'android.R.id.list'"
- ¿Configurar la imagen de fondo para el diseño relativo?
- Error: (27) No se encontró ningún identificador de recurso para el atributo 'srcCompat' en el paquete 'com.example.jaisonjoseph.newsclient'
- Cómo hacer una barra de progreso mostrar en la parte superior de un botón en android
- Uso del cajón de navegación sin TitleBar o ActionBar
- Alinear al elemento más grande de un RelativeLayout
- RelativeLayout refresh after view.setVisibility (View.GONE) y view.setVisibility (View.VISIBLE)
Esto funcionó para mí:
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);
Encontrado aquí: http://andrewhague.wordpress.com/2011/05/24/how-to-set-a-transparent-glsurfaceview/
Me gustaría lograr lo mismo con una vista en la parte superior de un GLSurfaceView y no he encontrado una solución sin limitaciones. En primer lugar, glView.setZOrderOnTop (true) proporciona el fondo transparente correcto, pero la vista siempre está en la parte superior sin importar la secuencia de las vistas de ordenación. En segundo lugar, sin ZOrderOnTop se mantiene la jerarquía de vista pero el fondo GLSurface es negro o el color que se establece con glClearColor (rojo, verde, azul, alfa) en el renderizador. Desafortunadamente, el argumento alfa no tiene ningún efecto al usar este método a menos que
android:windowIsTranslucent="true"
Y el problema con esto es que es posible que no quiera perforar un agujero en la vista OS. Debe haber una manera de lograr esto fácilmente para una interfaz de usuario más animada usando openGL. He buscado este sitio y otros sin encontrar una solución.
- ¿Qué es diferente entre @ + id / android: list y @ id / android: list?
- Android – Por qué ConnectivityManager.isActiveNetworkMetered siempre devuelve true (incluso en Wifi)