Использование класса GLSurfaceView с макетами Android xml - PullRequest
13 голосов
/ 26 октября 2011

Я хочу использовать макеты 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);

in onCreate ();

Как я могу вызвать свой glSurfaceView, чтобы я мог использовать макеты xml, подобные этому, а также ссылаться на свой собственный класс GLSurfaceView (ниже приведен код, который ссылается на мой собственный класс GLSurfaceView)...

glSurfaceView = new MyGLSurfaceView(this);
    setContentView(glSurfaceView);

Есть ли способ объединить эти два?Я хочу сделать это, потому что в моем классе glSurfaceView происходит множество вещей, таких как загрузка файлов и сенсорные события.И только я только подумал о реализации этого нового макета

Ответы [ 2 ]

21 голосов
/ 26 октября 2011

Просто укажите свой собственный класс (с полным именем пакета) в xml так же, как вы ссылаетесь на android.opengl.GLSurfaceView.Убедитесь, что ваш подкласс реализует правильный конструктор и передает контекст и атрибуты родителю:

public MyGLSurfaceView(Context context, AttributeSet attrs)
{
   super(context, attrs);

Затем вы можете получить его, используя findViewById:

MySurfaceView glSurfaceView = 
             (MySurfaceView)findViewById(R.id.surfaceviewclass);

Это должно сделатьобмануть.

1 голос
/ 26 марта 2015

Если все работает, как вы пишете в xml-макете, полный путь к классу Glsurfaceview: (и имя класса)

это работает, только если класс, GLSurfaceView, записан в собственном Файле. в этом файле для shure, конструкторы должны быть написаны правильно.

Я читал о, 1 конструктор для xml-ссылки, и один для связи между классами. Конструктор для xml-ссылки и один для связи между классами можно найти, если написано правильно, внутри GLSurfaceView , GLSurfaceView, где вы устанавливаете рендер, установите его в конструкторе 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..может быть найдено И Основная Активность

...