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

это должно сделать трюк.


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

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

Я читал о, 1 конструктор для xml-ссылки и один для связи между классами. конструктор для xml-refer, и один для comunication между классами, можно найти, если написано correcly, внутри GLSurfaceView . GLSurfaceView, где вы устанавливаете визуализатор, установите его в конструкторе xml, должен быть единственный способ, он работает нормально. (см. Вариант 1)

xml-конструктор:

public MyGLSurfaceView (контекстный контекст, AttributeSet attrs) { super (контекст, attrs); setEGLContextClientVersion (2);
renderer = новый рендеринг (контекст); setRenderer(визуализации);

Если вы некоторые из этих народов, кто не может получить работу SurfaceView, в xml-макете руда, которые покупают эту книгу от Apress-начало 3D-игры-разработки. не сердись и не причиняй себе вреда. На странице 44-45 это будет написано, в одном файле. Напишите GLSurfaceView, как в моем ответе, в собственном файле. Renderer-собственный файл, где: onSurfaceCreated, onSurfaceChanged, onDrawFrame..можно найти И В MainActivity