2010-01-21 5 views
9

Je suis nouveau à Java et OpenGL.surfaceview + glsurfaceview + framelayout

Je suis en train d'obtenir un écran de prévisualisation de la caméra avec la possibilité de afficher des objets 3D simultanément. Après avoir traversé les échantillons à les démos api, je pensais combiner le code pour les exemples à la démo api suffirait. Mais d'une manière ou d'une autre, ça ne marche pas. Les forces me pour arrêter au démarrage et l'erreur est mentionnée comme null pointeur exception. Est-ce que quelqu'un pourrait partager avec moi où je me suis trompé et comment procéder à partir de là. Comment ai-je la combinaison du code est telle qu'indiquée ci-dessous:

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

REMARQUE:

  • Je n'ai pas la liste le reste des fichiers car ils ne sont que des copies de les démos api. Le cameraView se réfère à l'exemple de camerapreview.java et la CubeRenderer fait référence à la CubeRenderer.java et Cube.java exemple. Toute aide serait appréciée.

  • Désolé, ne se rendent pas compte que le codage était hors de cause d'un formatage des erreurs.

Répondre

3

La raison pour laquelle vous obtenez une exception de pointeur nul lorsque vous travaillez avec .xml est parce que vous créez réellement de nouvelles vues dans votre code java .. au lieu d'utiliser celles du fichier .xml dans lequel vous avez pu passer propriétés (si vous avez passé dans les propriétés qui est ..) .. la nouvelle vue aurait évidemment une valeur nulle .. lançant ainsi une exception null pointeur ... par exemple -

cubesView = new GLSurfaceView (this) ;

est en fait pas nécessaire dans le code si vous avez déjà créé la vue dans le fichier .xml contenant FrameLayout ..

+0

Merci de l'avoir signalé! :RÉ – pohtzeyun

1

trouvé comment résoudre ... via le chemin java ... il suffit d'utiliser addContentView au lieu d'utiliser xml .... bien au moins son résolu. :)

0

En fait, je l'ai fait ici à this SO link qui fournit une mise en œuvre complète.

3

Ceci est très simple en fait ... si vous voulez définir votre point de vue en XML il vous suffit de mettre en œuvre à la place

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

de GLSurfaceView (contexte de contexte)

C'est celui qui est appelé automatiquement lorsque la vue est initialisée à partir du XML.J'ai eu le même problème et c'est comme ça que ça a été réparé.

Questions connexes