Использование класса GLSurfaceView с макетами android xml
Я хочу использовать макеты Android для xroid. Я поместил 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);
Это должно сделать трюк.
Ответ 2
Если все кончается, как вы пишете в xml-макете, полный путь к классу Glsurfaceview: (и имя класса)
работает только в том случае, если класс GLSurfaceView написан в собственном файле.
в этом файле для shure, конструкторы должны быть написаны правильно.
Я читаю о, 1 конструктор для xml-refer и один для общения между классами.
конструктор для xml-refer и один для общения между классами, могут быть найдены, если они написаны корректно, внутри GLSurfaceView
,
GLSurfaceView, где вы устанавливаете Renderer,
установить его в конструкторе xml, должен быть единственным способом, он отлично работает. (показано в андре 1)
XML-конструктор:
public MyGLSurfaceView (контекст контекста, AttributeSet attrs) {супер (контекст, attrs);
setEGLContextClientVersion (2);
renderer = new Renderer (контекст);
setRenderer (рендерер);
Если вы некоторые из этих народов,
которые не могут работать SurfaceView, в xml-layout ore, которые покупают эту книгу из Apress - Начало 3D-Game-Development.
не злитесь на руду.
На странице 44-45 он записывается в одном файле.
Напишите GLSurfaceView, как и в моем ответе, в собственном файле.
Renderer - это собственный файл, где:
onSurfaceCreated,
onSurfaceChanged,
onDrawFrame..может быть найдено
И MainActivity