3

Сегодня я создал 3D-объект с OpenGL ES в Android и думал о его отображении в других макетах, таких как SurfaceView или FrameLayout, в xml или любым возможным способом.Как установить класс GLSurfaceView.Renderer для отображения объекта в surfaceView или FrameLayout?

В приведенном ниже коде я устанавливаю объект GL в setContentView onCreate для отображения моего объекта. Если бы я должен был показать этот GLSurfaceView где-то еще, как я могу это сделать? Было бы здорово, если бы у меня были некоторые советы или примеры!

GLSurfaceView ourSurface; 


    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 


     //setting the gl surface view 
     ourSurface = new GLSurfaceView(this); 
     ourSurface.setRenderer(new GLCubeRender()); 


     setContentView(ourSurface); 

    } 

ответ

2

Сначала вы должны создать класс, который расширяет GLSurfaceView с конструктором, как вы видите, в следующем примере

package com.ball.views; 

import android.content.Context; 
import android.opengl.GLSurfaceView; 
import android.util.AttributeSet; 

public class MYGLSurfaceView extends GLSurfaceView { 

    public MYGLSurfaceView(Context context, AttributeSet attrs) { 
     super(context, attrs); 
    } 
} 

После этого вы можете создать файл XML с собственным GLSurfaceView внутри

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:orientation="vertical" android:layout_width="match_parent" 
    android:layout_height="match_parent"> 

    <com.ball.views.MYGLSurfaceView 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:id="@+id/GLSurfaceView1" /> 


</LinearLayout> 

Затем измените свой код, который вы опубликовали ранее, чтобы установить в виде созданный файл xml и получить GLSurfaceView из xml-файла

MYGLSurfaceView ourSurface; 


@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 

    setContentView(R.layout.your_xml_file); 
    //setting the gl surface view 
    ourSurface = (MYGLSurfaceView)this.findViewById(R.id.GLSurfaceView1); 
    ourSurface.setRenderer(new GLCubeRender()); 

}