Использование класса GLSurfaceView с макетами Android xml
Я хочу использовать макеты Android xml. Я поместил glSurfaceView в макет кадра, чтобы использовать его в сочетании с линейным макетом, например так...
<FrameLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_weight="1">
<android.opengl.GLSurfaceView android:id="@+id/surfaceviewclass"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
</FrameLayout>
<LinearLayout android:id="@+id/gamecontrolslayout"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_weight="5"
android:background="@drawable/backdrop">
//some layout stuff
</LinearLayout>
<LinearLayout>
Затем я называю свой макет так
setContentView(R.layout.main);
GLSurfaceView glSurfaceView = (GLSurfaceView)findViewById(R.id.surfaceviewclass);
в onCreate();
Как я могу вызвать свой glSurfaceView, чтобы я мог использовать макеты xml, подобные этой, а также ссылаться на свой собственный класс GLSurfaceView (ниже приведен код, который ссылается на мой собственный класс GLSurfaceView)...
glSurfaceView = new MyGLSurfaceView(this);
setContentView(glSurfaceView);
Есть ли способ объединить эти два? Я хочу сделать это, потому что в моем классе glSurfaceView происходит множество вещей, таких как загрузка файлов и сенсорные события. И только я только подумал о реализации этого нового макета
2 ответа
Просто укажите свой собственный класс (с полным именем пакета) в xml, так же, как вы ссылаетесь на android.opengl.GLSurfaceView. Убедитесь, что ваш подкласс реализует правильный конструктор и передает контекст и атрибуты родителю:
public MyGLSurfaceView(Context context, AttributeSet attrs)
{
super(context, attrs);
Затем вы можете получить его, используя findViewById:
MySurfaceView glSurfaceView =
(MySurfaceView)findViewById(R.id.surfaceviewclass);
Это должно делать свое дело.
Если все работает, как вы пишете в xml-макете, полный путь к классу Glsurfaceview: (и имя класса)
это работает, только если класс, GLSurfaceView, записан в собственном файле. в этом файле для shure, конструкторы должны быть написаны правильно.
я читал о,1 конструктор для xml-ссылки, и один для связи между классами. Конструктор для xml-ссылки и один для связи между классами можно найти, если написано правильно, внутри GLSurfaceView . GLSurfaceView, где вы устанавливаете Renderer, устанавливаете его в конструкторе xml, это должен быть единственный способ, он работает нормально. (показано в ответе 1)
XML-конструктор:
public MyGLSurfaceView (Контекст контекста, атрибуты AttributeSet) {super (context, attrs); setEGLContextClientVersion (2);
renderer = новый Renderer(контекст);
setRenderer(рендерер);
Если вы некоторые из этих людей, которые не могут получить SurfaceView, в руднике xml-layout, которые покупают эту книгу у Apress - Beginning 3D- Game-Development. не сердись, руда навредит себе. На стр. 44-45 это будет записано в одном файле. Напишите GLSurfaceView, как в моем ответе, в собственном файле. Рендерер - это собственный файл, в котором: onSurfaceCreated, onSurfaceChanged, onDrawFrame... можно найти и MainActivity