OpenGLビューの上にレイヤー化された追加のビューを持つAndroid用のシンプルな3-Dアプリを作成しようとしています(APIデモのSurfaceViewOverlayの例によく似ています)。拡張された GLSurfaceView クラスを使用してそのメソッドを実装しようとすると、問題が発生します。このデモと API Oerlay デモを組み合わせて実行しようとしている例を設定しました。このように Martin の VortexView オブジェクトにキャストしようとすると (API デモの 44 ~ 46 行を置き換えます)
VortexView glSurfaceView=
(VortexView) findViewById(R.id.glsurfaceview);
ClassCastException エラーが発生するので (キャストはかなり具体的であると想定しているため、理解できます)、ビューを GLSurfaceView インスタンスから新しいサブクラスに転送する方法、またはレンダリング サーフェスを作成後のサブクラスの XML 定義ビュー。
編集:これを機能させるためにいくつかの進歩を遂げました-ビューXMLが使用するAPIの例(ApiDemos/res/layout/surface_view_overlay.xmlから)
<android.opengl.GLSurfaceView android:id="@+id/glsurfaceview"
android:layout_width="match_parent"
android:layout_height="match_parent" />
その要素を
com.domain.project.VortexView に変更すると、上記のコードでキャストが正しく行われますが、surfaceCreated および surfaceChanged ルーチンにヒットすると Null Pointer Exceptions が生成されます (これは、GLThread クラスに基づいて呼び出されたメソッドだと思います)。行番号) GLSurfaceView クラス内。したがって、質問を変更する必要があるかもしれません- surfaceCreated および surfaceChanged で NullPointerExceptions を生成せずに GLSurfaceView の拡張機能を実装するにはどうすればよいですか、または GLSurfaceView.java のソースがなくてもそれらをデバッグするにはどうすればよいですか?