将 GLSurfaceView 类与 android xml 布局结合使用

我想利用Android xml布局。我已经将glSurfaceView放在框架布局中,以便与线性布局结合使用,如下所示...

<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>

然后我这样称呼我的布局

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

in onCreate();

我怎么能调用我的glSurfaceView,这样我就可以利用这样的xml布局,并引用我自己的GLSurfaceView类(下面是引用我自己的GLSurfaceView类的代码)...

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

有没有办法将这两者结合起来?我想这样做,因为我在我的glSurfaceView类中有很多东西,比如文件加载和触摸事件。只有我刚刚考虑过实现这个新布局


答案 1

只需在 xml 中引用你自己的类(具有完整的 packagename),就像你引用 android.opengl.GLSurfaceView 一样。确保您的子类实现了正确的构造函数,并将上下文和属性传递给父级:

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

然后,您可以使用 findViewById 获取它:

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

这应该可以解决问题。


答案 2

如果所有内容都像您在 xml 布局中编写的那样,则 Glsurfaceview 类的完整路径:(和类名)

只有当类GLSurfaceView写在自己的文件中时,它才有效。在 shure 的这个文件中,构造器需要正确编写。

我读到了关于xml引用的1个构造函数,以及一个用于类之间通信的构造函数。用于 xml 引用的构造函数,以及一个用于类之间通信的构造函数,如果正确编写,可以在 GLSurfaceView 中找到。GLSurfaceView,是你设置渲染器的地方,在xml构造函数中设置它,必须是唯一的方法,它工作正常。(如 1 所示)

xml-constructor:

public MyGLSurfaceView(Context context, AttributeSet attrs) { super(context, attrs); setEGLContextClientVersion(2);
renderer = new Renderer(context); setRenderer(renderer);

如果你中的一些人,他们无法获得SurfaceView的工作,在xml布局矿石中,他们从Apress购买这本书 - 开始3D - 游戏开发。不要生气矿石伤害自己。在第44-45页,它被写在一个文件中。写GLSurfaceView,就像我的答案一样,在自己的文件中。Renderer是自己的文件,其中:onSurfaceCreated,onSurfaceChanged,onDrawFrame。可以找到和主要活动


推荐