13

androidxmlレイアウトを利用したい。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);

onCreate();

このようなxmlレイアウトを利用し、自分のGLSurfaceViewクラスを参照できるようにglSurfaceViewを呼び出すにはどうすればよいですか(以下は自分のGLSurfaceViewクラスを参照するコードです)...

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

これら2つを組み合わせる方法はありますか?このcosを実行したいのですが、ファイルの読み込みやタッチイベントなど、glSurfaceViewクラスで多くのことが行われています。そして、私だけがこの新しいレイアウトを実装することを考えました

4

2 に答える 2

22

android.opengl.GLSurfaceViewを参照するのと同じ方法で、xmlで独自のクラス(完全なパッケージ名を使用)を参照するだけです。サブクラスが適切なコンストラクターを実装し、コンテキストと属性を親に渡すことを確認してください。

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

次に、findViewByIdを使用してフェッチできます。

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

それでうまくいくはずです。

于 2011-10-26T17:18:09.143 に答える
1

xml-layoutに書き込むように、すべてが正しくなる場合は、Glsurfaceview-classへの完全なパス:(およびクラス名)

クラスGLSurfaceViewが独自のファイルに記述されている場合にのみ機能します。このファイルのshureでは、コンストラクターを正しく記述する必要があります。

xml-refer用のコンストラクターとクラス間の通信用のコンストラクターについて読みました。xml-referのコンストラクター、およびクラス間の通信用のコンストラクターは、正しく記述されていれば、GLSurfaceView内にあります。GLSurfaceViewは、レンダラーを設定し、xmlコンストラクターで設定する場所です。これが唯一の方法である必要があり、正常に機能します。(回答1に表示)

xml-コンストラクター:

public MyGLSurfaceView(Context context、AttributeSet attrs){super(context、attrs); setEGLContextClientVersion(2);
レンダラー=新しいレンダラー(コンテキスト); setRenderer(レンダラー);

この本をApressから購入するxml-layoutoreで、SurfaceViewを動作させることができないこの人々の一部は、3Dゲーム開発を開始します。怒ってはいけません鉱石は自分を傷つけます。44-45ページでそれは1つのファイルに書かれています。私の答えのように、GLSurfaceViewを自分のファイルに書き込んでください。レンダラーは独自のファイルであり、onSurfaceCreated、onSurfaceChanged、onDrawFrame..が見つかり、MainActivityが見つかります。

于 2015-03-26T06:50:43.330 に答える