2011-10-26 11 views
12

Desidero utilizzare i layout di Android xml. Ho messo un glSurfaceView in un layout telaio da utilizzare in combinazione con un layout lineare, in questo modo ...Uso della classe GLSurfaceView con layout xml android

<FrameLayout 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:layout_weight="1"> 

<android.opengl.GLSurfaceView android:id="@+id/surfaceviewclass" 
android:layout_width="match_parent" 
android:layout_height="match_parent"/> 

</FrameLayout> 

<LinearLayout android:id="@+id/gamecontrolslayout" 
      android:layout_width="fill_parent" 
      android:layout_height="fill_parent" 
      android:layout_weight="5" 
      android:background="@drawable/backdrop"> 
//some layout stuff 

</LinearLayout> 
<LinearLayout> 

Ho poi chiamo il mio layout in questo modo

setContentView(R.layout.main); 
    GLSurfaceView glSurfaceView = (GLSurfaceView)findViewById(R.id.surfaceviewclass); 

a onCreate ();

Come posso chiamare il mio glSurfaceView modo che io possa fare uso dei layout XML come questo e anche fare riferimento mia classe GLSurfaceView (qui di seguito è il codice che fa riferimento mia classe GLSurfaceView) ...

glSurfaceView = new MyGLSurfaceView(this); 
    setContentView(glSurfaceView); 

Esiste comunque la combinazione di questi due? Voglio farlo perché ho un sacco di cose in corso nella mia classe glSurfaceView come il caricamento dei file e gli eventi touch. E solo ho pensato di implementare questo nuovo layout

risposta

18

Basta fare riferimento alla propria classe (con nome pacchetto completo) nell'xml, allo stesso modo in cui si fa riferimento a android.opengl.GLSurfaceView. Assicurarsi che la sottoclasse implementa la funzione di costruzione corretta, e passa il contesto & attribuisce al genitore:

public MyGLSurfaceView(Context context, AttributeSet attrs) 
{ 
    super(context, attrs); 

Quindi è possibile recuperare utilizzando findViewById:

MySurfaceView glSurfaceView = 
      (MySurfaceView)findViewById(R.id.surfaceviewclass); 

Questo dovrebbe fare il trucco.

+0

mia superficie vista non dispone di un set di attributi dovrebbe quella materia? – Jack

+0

L'implementazione appena sopra dice che ha problemi a gonfiare la classe. L'errore proviene dal file xml – Jack

+0

La tua classe è pubblica? – svdree

0

Se tutto corect, come si scrive nel xml layout, il percorso completo del Glsurfaceview-classe: (e nomeclasse)

funziona solo se la classe, GLSurfaceView, scritto in un proprio file. in questo file per shure, i costruttori devono essere scritti correttamente.

ho letto, 1 costruttore di XML-riferimento, ed uno per comunicazione tra le classi. costruttore per xml-riferimento, ed uno per comunicazione tra le classi, si possono trovare, se scritto correcly, all'interno GLSurfaceView . GLSurfaceView, è dove si imposta il Renderer, impostato nel costruttore xml, deve essere l'unico modo, funziona correttamente. (Mostrato in anwer 1)

xml-costruttore:

MyGLSurfaceView pubblico (contesto Context, attrs AttributeSet) {super (contesto, attrs); setEGLContextClientVersion (2);
renderer = new Renderer (contesto); setRenderer (renderer);

Se alcuni di questi popoli, non riescono a far funzionare SurfaceView, in xml-layout ore, chi acquista questo libro da Apress - Beginning 3D- Game-Development. non essere arrabbiato, ferirti. A pagina 44-45 è scritto, in un file. Scrivi GLSurfaceView, come nella mia risposta, nel proprio file. Renderer è file, dove: onSurfaceCreated, onSurfaceChanged, onDrawFrame..can essere trovato And The MainActivity

+0

se apprendi veramente gles per Android, comprerei la stampa dal libro "Beginning And ... 3D" - Robert Chin, ad esso accanto alla tua scrivania, guarda il nuovo bosten. – azuztekztorem

Problemi correlati