#java #android #android-layout #opengl-es #glsurfaceview
#java #Android #android-layout #opengl-es #glsurfaceview
Вопрос:
Я хочу использовать макеты 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 происходит множество вещей, таких как загрузка файлов и события касания. И только я только что подумал о реализации этого нового макета
Ответ №1:
Просто ссылайтесь на свой собственный класс (с полным именем пакета) в xml, так же, как вы ссылаетесь на android.opengl.GLSurfaceView. Убедитесь, что ваш подкласс реализует правильный конструктор и передает контекст и атрибуты родительскому классу:
public MyGLSurfaceView(Context context, AttributeSet attrs)
{
super(context, attrs);
Затем вы можете извлечь его с помощью findViewById:
MySurfaceView glSurfaceView =
(MySurfaceView)findViewById(R.id.surfaceviewclass);
Это должно сработать.
Комментарии:
1. В моем представлении Surface нет набора атрибутов, если это имеет значение?
2. Просто implementend выше сказано, что у него проблемы с раздуванием класса. Ошибка возникает из файла xml
3.
public class MyGLSurfaceView extends GLSurfaceView {
и конструкторpublic MyGLSurfaceView(Context context){ super(context);
4. Но теперь любые вызовы, которые я делаю для своего surface view (ie:
glSurfaceView.requestRender
), перестали работать = (5. Странно, что все это работает сейчас. Оказывается, вы делаете все, что сказали, за исключением того, что вам нужно получить GLSurfaceView с
glSurfaceView = new MyGLSurfaceView(this);
помощью, а затем установить XML-файл в качестве содержимого, насколько это раздражает. не могли бы вы обновить свой ответ, чтобы он соответствовал, пожалуйста.
Ответ №2:
Если все правильно, как вы пишете в xml-макете, полный путь к Glsurfaceview-class : (и classname)
это работает, только если класс GLSurfaceView записан в собственном файле. в этом файле для shure конструкторы должны быть написаны правильно.
я читал о, 1 конструкторе для xml-ссылки и один для связи между классами. конструктор для xml-ссылки и один для связи между классами можно найти, если он написан правильно, внутри GLSurfaceView . GLSurfaceView — это то место, где вы устанавливаете средство визуализации, устанавливаете его в конструкторе xml, должно быть единственным способом, он работает нормально. (показано на примере 1)
xml-конструктор:
public MyGLSurfaceView(Context context, AttributeSet attrs) { super(context, attrs); setEGLContextClientVersion(2);
средство визуализации = новое средство визуализации (контекст); setRenderer(средство визуализации);
Если вы являетесь одним из этих людей, которые не могут заставить SurfaceView работать в xml-макете, которые покупают эту книгу у Apress — Начинайте разработку 3D-игр. не сердитесь и не причиняйте себе вреда. На странице 44-45 это должно быть записано в одном файле. Напишите GLSurfaceView, как в моем ответе, в собственном файле. Средство визуализации — это собственный файл, где: onSurfaceCreated, onSurfaceChanged, onDrawFrame .. можно найти и MainActivity
Комментарии:
1. если вы действительно изучаете gl es для Android, я бы купил распечатку из книги «Начало и … 3D» — Роберт Чин, к ней рядом с вашим столом, смотрите Новый бостен.