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