2010-10-02 12 views
5

Tengo una GLSurfaceView con un estirable como fondo, sin embargo, sólo el fondo es visible cuando se representa sin surfaceView.setZOrderOnTop (verdadero)Android GLSurfaceView con el fondo dibujable

tengo que evitar el uso de setZOrderOnTop (verdadero) porque no son estáticos TextView se usa en la parte superior de GLSurfaceView.

¿Alguna sugerencia para que esto funcione?

Respuesta

9

GLSurfaceView puede en realidad no tienen un fondo . La forma en que funciona una vista de superficie es cortando un agujero a través de la ventana de tu Actividad y mostrando otra superficie detrás. Establecer setZOrderOnTop (verdadero) mueve la superficie por encima de la ventana de la actividad.

+0

¡Gracias fue muy útil! ¿Hay alguna manera de recomendar lo que necesitaba para obtener lo siguiente: imagen de fondo estática -> contenido en 3D -> botones de vistas adicionales en la parte superior o es la única forma de representar el fondo estático como textura en un polígono? – Jlam

+1

Terminé simplemente renderizando el fondo en un polígono detrás de todo lo demás ... ¡gracias por la sugerencia! – Jlam

1

Bueno, ya GLSurfaceView es sólo otro punto de vista, por qué no usar un FrameLayout para colocar el GLSurfaceView en la parte superior de la ImageView (o lo que sea que estés usando para mostrar la estirable.)

+0

Cansado, pero no funcionaba debido a las siguientes condiciones: 1. La capa gl tiene una imagen de fondo constante. 2. hay elementos adicionales en la parte superior de la capa de gl como botones, etc. No fue posible establecer la imagen estática como fondo en la capa de gl porque el contenido en 3D real no se procesaría a menos que configuréZOrderOnTop (verdadero) en el capa gl Pero si hago eso, entonces los elementos adicionales terminarían debajo de la capa gl. – Jlam

6

¡falso! Puedes hacerlo. Solo un ejemplo para mostrar cómo funciona.

glRenderer = new OpenGLRenderer(context); 
view = new GLSurfaceView(context); 
view.setEGLConfigChooser(8, 8, 8, 8, 16, 0); 
view.setRenderer(glRenderer); 
view.getHolder().setFormat(PixelFormat.RGBA_8888); 
view.getHolder().setFormat(PixelFormat.TRANSLUCENT); 
view.setRenderMode(GLSurfaceView.RENDERMODE_CONTINUOUSLY); 

A continuación, utilice FrameLayout poner un punto de vista bajo glsurfaceview!

+0

Gracias. Hizo que mi descendiente GLSurfaceView fuera transparente. Pero, en realidad, REDERMODE_CONTINUOUSLY es el valor predeterminado y, para mí, agregar la última línea bloquea la aplicación. –

+1

Esto se debe a que debe configurarRenderMode antes de ver.setRenderer –

+0

qué poner en FrameLayout para mantener las otras vistas arriba de GLsurfaceView? –

2

Pruebe setZOrderMediaOverlay (true); que debería poner la capa gl sobre el fondo pero debajo de la ventana.

Cuestiones relacionadas