Android OpenGLアプリケーションを起動し、次のクラスがあります。
class A extends Activity
class B extends GlSurfaceView implements Renderer
クラスAのonCreateが呼び出されると、クラスBタイプのオブジェクトが作成され、次のように呼び出されます。
setContentView(Bobject)
これまでのところそれは機能し、私はそれに数日を費やしました。
ここで、アプリケーションにボタンを追加したいと思い、SurfaceViewOverlayの例を見つけました。これは、いくつかのXMLを使用してビュー階層を作成します。XMLコードを切り取って貼り付けるのと非常によく似たものを作成したかったのです。
<android.opengl.GLSurfaceView android:id="@+id/glsurfaceview"
android:layout_width="match_parent"
android:layout_height="match_parent" />
<LinearLayout android:id="@+id/hidecontainer"
android:orientation="vertical"
android:visibility="gone"
android:background="@drawable/translucent_background"
android:gravity="center"
android:layout_width="match_parent"
android:layout_height="match_parent">
...
元のクラス階層を念頭に置いて、ビューを初期化するにはどうすればよいですか?クラスAのonCreate()に何を書くべきですか?
私は使ってみました:
Bobject = new B(this);
GLSurfaceView glSurfaceView =
(GLSurfaceView) findViewById(R.id.glsurfaceview);
glSurfaceView.setRenderer(Bobject);
また、ボタンとGLビューを画面に描画しますが、GLビューはタップ/クリックからの入力を取り込むことができません。
これは、BobjectのonTouchEvent()が次のようにのみ使用されているため、呼び出されていないことが原因である可能性があります。
Renderer
ではなく:
glSurfaceView
物体。
上記のコードの代わりに、私が本当に望んでいるのは、BobjectでglSurfaceViewを置き換えることです。しかし、私はそれを行う方法がわかりません。findViewById()を実行すると、glSurfaceViewは今のところすでに作成されているようです。GLビューにタイプBのオブジェクトを使用するように依頼するにはどうすればよいですか?
初心者のミスについては申し訳ありません。Androidはまったく新しい。
編集:私もこれを試しました:
また、次のことも試しました。XMLファイルで、GLSurfaceViewを次のように変更しました。
<com.bla.bla.B
android:id="@+id/glsurfaceview"
android:layout_width="match_parent"
android:layout_height="match_parent" />
そして、私のAクラスコンストラクターでは、次のように呼び出しています。
// This returns null
Bobject = (B) findViewById(R.id.glsurfaceview);
// And this suspends the application. :(
setContentView(R.layout.surface_view_overlay);
XMLファイル/アクティビティでglSurfaceViewを拡張するカスタムクラスをどのように使用する必要がありますか?