surfaceview + glsurfaceview + framelayout

时间:2010-01-21 10:57:51

标签: android surfaceview

我是java和OpenGL的新手。

我正在尝试使用相机预览屏幕 同时显示3d对象。完成了样本 在api演示中,我认为将示例的代码组合在一起 api演示就足够了。但不知何故它不起作用。强迫我 在启动时关闭,错误被称为空指针 例外。有人可以和我分享我哪里出错了,怎么样 从那里开始。我如何为代码组合如图所示 下面:

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

注意:

  • 我没有列出其余的文件,因为它们只是副本 api演示。 cameraView引用camerapreview.java示例 CubeRenderer引用CubeRenderer.java和Cube.java 例。任何帮助,将不胜感激。

  • 抱歉,由于格式错误,没有意识到编码不合适。

4 个答案:

答案 0 :(得分:4)

在使用.xml时获得空指针异常的原因是因为你实际上在java代码中创建了新的视图而不是使用你可能在属性中传递的.xml文件中的那些视图(如果你确实传递了属性..)..新的View显然会有一个空值..因此抛出空指针异常...例如 -

cubesView = new GLSurfaceView(this);

如果您已经在包含FrameLayout的.xml文件中创建了View,那么代码中实际上不需要

答案 1 :(得分:4)

实际上这很简单......如果你想用XML定义你的视图,你只需要实现

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

而不是GLSurfaceView(上下文上下文)

这是从XML初始化视图时自动调用的那个。我有同样的问题,这是如何解决的。

答案 2 :(得分:1)

发现如何解决它...通过java方式...只需使用addContentView而不是使用xml ....至少它解决了。 :)

答案 3 :(得分:0)

我实际上是在this SO link中完成的,它提供了完整的实现。