2011-10-26 25 views
12

android xmlレイアウトを利用したいと思います。私は、その後(のonCreateでそうandroid xmlレイアウトでGLSurfaceViewクラスを使用する

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

ように私のレイアウトを呼び出すので...

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

のように直線的なレイアウトと組み合わせて使用​​するフレームレイアウトにglSurfaceViewを入れています);

私はこのようなXMLのレイアウトを利用し、また私自身GLSurfaceViewクラスを参照できるように、私は...(以下自分のGLSurfaceViewクラスを参照するコードがある)私のglSurfaceViewを呼び出すことができますどのように

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

これら2つを組み合わせてもらえますか?私は、ファイルローディングやタッチイベントのようなglSurfaceViewクラスで何かのことが起こっているので、これを実行したいと思います。そして、私はこの新しいレイアウトを実装することを考えただけです。

答えて

18

android.opengl.GLSurfaceViewと同じ方法で、xmlに独自のクラスを(完全なパッケージ名で)参照してください。

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

次にあなたがfindViewByIdを使用して、それを取得することができます:

トリックを行う必要があります
MySurfaceView glSurfaceView = 
      (MySurfaceView)findViewById(R.id.surfaceviewclass); 

あなたのサブクラスが適切なコンストラクタを実装し、親に属性&コンテキストを渡すことを確認します。

+0

私の表面図は、属性セットがその問題べきではありません見つけることがonDrawFrame..can? – Jack

+0

ちょうど上記の実装は、クラスを膨張させるのに問題があると言っています。エラーはXMLファイルから来ます – Jack

+0

あなたのクラスは公開されていますか? – svdree

0

すべてcorect、あなたはXMLレイアウトで書くように、Glsurfaceviewクラスへのフルパス場合:(とクラス名)は

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

xml-referのコンストラクタは1つ、クラス間のコミッションは1つです。 xml-referのコンストラクタ、およびクラス間のコミッションのためのコンストラクタは、GLSurfaceView の中に記述されていれば見つかります。 GLSurfaceViewは、レンダラーを設定する場所で、xmlコンストラクターに を設定します。唯一の方法でなければなりません。正常に動作します。

XML-コンストラクタ(anwer 1に示されている):

公共MyGLSurfaceView(コンテキスト・コンテキスト、属性セットのATTRS){スーパー(文脈、ATTRS)。 setEGLContextClientVersion(2);
レンダラー=新しいレンダラー(コンテキスト)。 setRenderer(renderer);

あなたは、この書籍をApress - Beginning 3D- Game-Developmentから購入するxml-layout oreでSurfaceViewの仕事を得ることができない人たちの一部です。 怒っている鉱石はあなた自身を傷つけません。 44-45ページで、1つのファイルに書き込まれます。 GLSurfaceViewを私の答えと同じように、自分のファイルに書き込んでください。 レンダラーが自分のファイル、次のとおりです。 onSurfaceCreated、 はonSurfaceChanged、 は そしてMainActivity

+0

あなたが本当にアンドロイドのためにgl esを学んだら、私は "Beginning And ... 3D"という本からプリントを購入するだろう - あなたの机の横にあるロバートチンは、新しいボステンを見てください。 – azuztekztorem

関連する問題