SurfaceView + glsurfaceview + framelayout
-
22-09-2019 - |
Domanda
Sono nuovo a Java e OpenGL.
Sto cercando di ottenere uno schermo di anteprima della fotocamera con la possibilità di visualizzare contemporaneamente oggetti 3D. Dopo aver attraversato i campioni a le demo api, ho pensato combinando il codice per gli esempi a l'API demo sarebbe sufficiente. Ma in qualche modo la sua non funziona. Le forze mi arrestare all'avvio e l'errore viene indicato come puntatore nullo eccezione. Potrebbe condividere qualcuno con me dove ho sbagliato e come procedere da lì. Come ho fatto la combinazione per il codice viene mostrato come qui di seguito:
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:
-
Non ho elencare il resto dei file in quanto sono solo copie di le demo api. Il cameraView riferisce esempio camerapreview.java e il CubeRenderer riferisce alla CubeRenderer.java e Cube.java esempio. Qualsiasi aiuto sarebbe apprezzato.
-
Siamo spiacenti, non si rese conto che la codifica era fuori luogo a causa di errori di formattazione.
Soluzione
la ragione si stanno ottenendo un'eccezione di puntatore nullo quando si lavora con XML è perché ur in realtà la creazione di nuove viste nel codice java .. invece di utilizzare quelli dal file .xml a cui si potrebbe avere passato in proprietà (se u ha passato in proprietà che è ..) .. il nuovo Panorama sarebbe ovviamente hanno un valore nullo .. gettando così un'eccezione di puntatore nullo ... per esempio -
cubesView = new GLSurfaceView (this);
in realtà non è necessario il codice se già creato la vista nel file XML contenente FrameLayout ..
Altri suggerimenti
Questo è molto semplice in realtà ... se si desidera definire la visualizzazione in XML è sufficiente implementare
Public GLSurfaceView(Context context, AttributeSet attrs) {
...
super(context, attrs);
}
al posto di GLSurfaceView (contesto Context)
Questo è quello che viene chiamato automaticamente quando la vista viene inizializzata dal XML. Ho avuto lo stesso problema ed è così che è stato fissato.
Trovato il modo di risolverlo ... via via java ... basta usare addContentView invece di usare XML .... beh almeno il suo risolto. :)
ho effettivamente fatto che qui in questo link SO che fornisce una completa implementazione.