2010-10-02 3 views
5

Ho un GLSurfaceView con un disegnabile come sfondo, ma solo lo sfondo è visibile se fusi senza surfaceView.setZOrderOnTop (vero)Android GLSurfaceView con sfondo drawable

ho bisogno di evitare l'uso di setZOrderOnTop (vero), perché ci sono statici TextView viene utilizzato in cima a GLSurfaceView.

Qualche suggerimento per farlo funzionare?

risposta

9

GLSurfaceView non può avere realmente uno sfondo . Il modo in cui funziona una vista di superficie è tagliando un buco nella finestra della tua attività e mostrando un'altra superficie dietro. L'impostazione di setZOrderOnTop (true) sposta la superficie sopra la finestra dell'attività.

+0

Grazie che è stato molto utile! C'è un modo che potresti raccomandare per ottenere ciò di cui avevo bisogno: un'immagine di sfondo statica -> contenuto 3d -> pulsanti di visualizzazione aggiuntivi in ​​alto o è l'unico modo per rendere solo lo sfondo statico come trama su un poligono? – Jlam

+1

Ho finito con il rendering dello sfondo su un poligono dietro a tutto il resto .. grazie per il suggerimento! – Jlam

1

Ebbene, dal momento che GLSurfaceView è solo un altro vista, perché non utilizzare un FrameLayout per posizionare il GLSurfaceView in cima al ImageView (o qualsiasi altra cosa che si sta utilizzando per visualizzare il drawable.)

+0

Stanco ma non funzionava a causa delle seguenti condizioni: 1. Il livello gl ha un'immagine di sfondo costante. 2. ci sono elementi aggiuntivi sopra al livello gl come pulsanti, ecc. Non è stato possibile impostare l'immagine statica come sfondo sullo strato gl perché il contenuto 3d effettivo non sarebbe stato visualizzato a meno che non avessi impostatoZOrderOnTop (true) sul strato di gl Ma se lo faccio, gli elementi aggiuntivi finirebbero sotto il gl layer. – Jlam

6

falso! Puoi farlo. Solo un esempio per mostrare come funziona.

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

Quindi utilizzare framelayout per mettere una vista sotto glsurfaceview!

+0

Grazie. Ha reso trasparente la mia discendente GLSurfaceView. Ma in realtà REDERMODE_CONTINUOUSLY è il valore predefinito e per me l'aggiunta dell'ultima riga provoca il blocco dell'applicazione. –

+1

Ecco perché devi impostareRenderMode prima di view.setRenderer –

+0

cosa mettere in FrameLayout per mantenere le altre viste sopra GLsurfaceView? –

2

Provare setZOrderMediaOverlay (true); che dovrebbe mettere lo strato di gl sopra lo sfondo ma sotto la finestra.