Я запустил приложение Android OpenGL, и у меня есть следующие классы:
class A extends Activity
class B extends GlSurfaceView implements Renderer
Когда вызывается метод onCreate класса A, он создает объект типа класса 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">
...
Now keeping in mind my original class hierarchy, how would I initialize my views? What should I write in onCreate() of my class A?
Я пытался использовать:
Bobject = new B(this);
GLSurfaceView glSurfaceView =
(GLSurfaceView) findViewById(R.id.glsurfaceview);
glSurfaceView.setRenderer(Bobject);
И он рисует кнопки и представление GL на экране, но представление GL не может принимать какие-либо данные от нажатий/щелчков.
Вероятно, это связано с тем, что onTouchEvent() Bobject не вызывается, поскольку используется только как:
Renderer
а не а:
glSurfaceView
объект.
Вместо приведенного выше кода я действительно хочу, чтобы Bobject заменил glSurfaceView. Но я не знаю, как это сделать. Когда я делаю findViewById(), кажется, что glSurfaceView уже создан. Как я могу попросить его использовать объект типа B для представления GL?
Извините за любые ошибки новичка. Совершенно новый для 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);
Как мне использовать свой собственный класс, который расширяет glSurfaceView в моем XML-файле/активности?