Использование класса 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

Другие вопросы по тегам