2011-10-26 20 views
12

Quiero utilizar los diseños xml de Android. He puesto un glSurfaceView en un diseño de marcos para su uso en conjunción con un diseño lineal como tal ...Uso de la clase GLSurfaceView con diseños xml de 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> 

entonces llamo a mi disposición como tal

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

en onCreate ();

¿Cómo puedo llamar a mi glSurfaceView para que pueda hacer uso de los diseños de XML como este y también hacer referencia a mi propia clase GLSurfaceView (continuación es código que hace referencia a mi propia clase GLSurfaceView) ...

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

¿Hay alguna forma de combinar estos dos? Quiero hacer esto porque tengo muchas cosas en mi clase glSurfaceView, como carga de archivos y eventos táctiles. Y solo que acabo de pensar en implementar este nuevo diseño

Respuesta

18

Simplemente haga referencia a su propia clase (con el nombre completo del paquete) en el xml, de la misma manera que hace referencia a android.opengl.GLSurfaceView. Asegúrese de que su subclase implementa el constructor adecuado, y pasa el contexto & atribuye al padre:

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

Entonces se puede recuperar usando findViewById:

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

Que debe hacer el truco.

+0

Mi Superficie Vista no tiene un conjunto de atributos que la materia debe? – Jack

+0

Simplemente implementey lo anterior dice que tiene problemas para inflar la clase. El error proviene del archivo xml – Jack

+0

¿Su clase es pública? – svdree

0

Si todo corect, como se escribe en el xml-diseño, la ruta completa a la clase Glsurfaceview: (y nombre de clase)

sólo funciona si la clase, GLSurfaceView, escrito en una propio archivo. en este archivo para shure, los constructores deben escribirse correctamente.

que he leído, 1 constructor para xml-refer y uno para comunicación entre clases. constructor para xml-reference, y uno para comunicación entre clases, se puede encontrar, si se escribe correctamente, dentro de GLSurfaceView . GLSurfaceView, es donde configura el Renderer, configúrelo en el constructor xml, debe ser la única forma, funciona bien. (Mostrado en anwer 1)

xml-constructor:

MyGLSurfaceView público (contexto Contexto, attrs AttributeSet) {super (contexto, attrs); setEGLContextClientVersion (2);
renderer = new Renderer (contexto); setRenderer (renderer);

Si algunos de estos pueblos, que no pueden hacer que SurfaceView trabaje, en xml-layout mineral, que compraron este libro de Apress - Beginning 3D- Game-Development. no te enojes, o te lastimas a ti mismo. En la página 44-45 se escribirá, en un solo archivo. Escribe GLSurfaceView, como en mi respuesta, en el archivo propio. Renderizador se propio archivo, donde: onSurfaceCreated, onSurfaceChanged, onDrawFrame..can puede encontrar Y La MainActivity

+0

si realmente aprende cosas para Android, compraría la impresión del libro "Beginning And ... 3D" - Robert Chin, junto a su escritorio, vea el nuevo bosten. – azuztekztorem

Cuestiones relacionadas