Я пытаюсь создать простое трехмерное приложение для Android, у которого будет дополнительное представление, наложенное поверх представления OpenGL (очень похоже на пример SurfaceViewOverlay в демонстрационных версиях API). Я столкнулся с проблемой, пытаясь реализовать этот метод с расширенным классом GLSurfaceView. Я создал пример, в котором я пытаюсь создать комбинацию этой демонстрации с демонстрацией API Oerlay. Если я попытаюсь привести к объекту Мартина VortexView, как это (замените строки 44-46 в демонстрации API)
VortexView glSurfaceView=
(VortexView) findViewById(R.id.glsurfaceview);
Я получаю ошибку ClassCastException (которая понятна, поскольку я предполагаю, что приведение является довольно специфическим), поэтому я предполагаю, что ищу метод для переноса представления из экземпляра GLSurfaceView в новый подкласс или способ установить рендеринг Поверхность к определенному XML-представлению для подкласса после его создания.
EDIT:
Я добился определенного прогресса, пытаясь заставить это работать ...
в примере API представление XML использует
(из 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 (я думаю, это вызываемые методы в классе GLThread на основе номера строки) внутри класса GLSurfaceView. Так что, возможно, я должен изменить вопрос
Как реализовать расширение для GLSurfaceView, не генерируя исключения NullPointerException для surfaceCreated и surfaceChanged, или как их отладить, не имея источника для GLSurfaceView.java?