2010-01-21 29 views
9

Soy nuevo en java y OpenGL.surfaceview + glsurfaceview + framelayout

Estoy tratando de obtener una pantalla de vista previa de la cámara con la capacidad de mostrar objetos en 3D simultáneamente. Después de haber examinado las muestras en las demostraciones api, pensé que combinando el código para los ejemplos en la demostración api sería suficiente. Pero de alguna manera no está funcionando. Las fuerzas me para cerrar en el arranque y el error se menciona como null puntero excepción. ¿Podría alguien compartir conmigo dónde me equivoqué y cómo proceder desde allí? Cómo lo hice la combinación para el código es como se muestra a continuación :

myoverview.xml


<?xml version="1.0" encoding="utf-8"?> 
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:orientation="horizontal" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent"> 
    <android.opengl.GLSurfaceView 
      android:id="@+id/cubes" 
      android:orientation="horizontal" 
      android:layout_width="fill_parent" 
      android:layout_height="fill_parent"/> 
    <SurfaceView 
      android:id="@+id/camera" 
      android:layout_width="fill_parent" 
      android:layout_height="fill_parent"/> 
</FrameLayout> 

myoverview.java


import android.app.Activity; 
import android.os.Bundle; 
import android.view.SurfaceView; 
import android.view.Window; 
public class MyOverView extends Activity { 
@Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     // Hide the window title. 
     requestWindowFeature(Window.FEATURE_NO_TITLE); 
     // camera view as the background 
     SurfaceView cameraView = (SurfaceView) findViewById(R.id.camera); 
     cameraView = new CameraView(this); 
     // visual of both cubes 
     GLSurfaceView cubesView = (GLSurfaceView) findViewById(R.id.cubes); 
     cubesView = new GLSurfaceView(this); 
     cubesView.setRenderer(new CubeRenderer(false)); 
     // set view 
     setContentView(R.layout.myoverview); 
    } 
} 

GLSurfaceView.java


import android.content.Context; 
class GLSurfaceView extends android.opengl.GLSurfaceView { 
    public GLSurfaceView(Context context) { 
      super(context); 
    } 
} 

NOTA:

  • que no incluyó el resto de los archivos, ya que son sólo copias de las demostraciones de la API. La cámara se refiere al ejemplo de cámarapreview.java y el CubeRenderer hace referencia al ejemplo CubeRenderer.java y Cube.java . Cualquier ayuda sería apreciada.

  • Disculpe, no me di cuenta de que la codificación estaba fuera de lugar debido a errores de formato.

Respuesta

3

la razón por la que está obteniendo una excepción de puntero nulo cuando se trabaja con .xml es porque realmente está creando nuevas Vistas en su código java ... en lugar de usar las del archivo .xml al que podría haber pasado propiedades (si pasó en propiedades que son ..) ... la nueva Vista obviamente tendrá un valor nulo ... por lo tanto, arrojando una excepción de puntero nulo ... por ejemplo -

cubesView = new GLSurfaceView (this) ;

en realidad no es necesario en el código si ya ha creado la vista en el archivo .xml que contiene FrameLayout ..

+0

¡Gracias por señalar eso! :RE – pohtzeyun

1

encontrado la manera de resolverlo ... a través de la forma en java ... sólo tiene que utilizar addContentView en lugar de utilizar XML .... bueno, al menos, su resuelto. :)

0

realidad lo hice aquí en this SO link que proporciona una implementación completa.

3

Esto es muy simple en realidad ... si quieres definir nuestra vista de XML sólo hay que poner en práctica

Public GLSurfaceView(Context context, AttributeSet attrs) { 
... 
super(context, attrs); 
} 

en lugar de GLSurfaceView (contexto Contexto)

Esa es la única que es llamada automáticamente cuando la vista se inicializa desde el XML.Tuve el mismo problema y así fue como se solucionó.

Cuestiones relacionadas