2010-11-08 4 views
9

Как настроить раскладку xml, где OpenGL-представление является частью этого? Поскольку теперь я устанавливаю представление OpenGL как единственное представление с setContentView(). Но я хотел бы создать макет xml, который включает в себя представление OpenGL. Допустим, я хочу, чтобы OpenGL выглядел в основном и небольшой TextView внизу.OpenGL-просмотр внутри макета

Возможно ли это? Или может ли представление OpenGL быть единственным и единственным?

ответ

7

Вы можете посмотреть SurfaceView. Он обеспечивает выделенную поверхность чертежа, встроенную внутри иерархии представлений. См. Также drawing with canvas.

+0

Thanx! Теперь просматриваем SurfaceView. Это похоже на то, что мне нужно, но я не могу понять, как это сделать на самом деле. Я могу настроить SurfaceView в XML-файле макета. И я могу установить setContentView() для использования этого макета xml. Но я не вижу, как сделать мой класс GLSurfaceView привлекательным для SurfaceView файла макета xml. – Espen

+1

О, GLSurfaceView - это SurfaceView, поэтому вы можете просто использовать его в своем макете, где вы используете SurfaceView. –

3

Создайте LinearLayout внутри вашего XML-файла. Затем в деятельности, используйте findViewById(), чтобы получить макет и использовать addView(), чтобы добавить OpenGL SurfaceView в макете:

LinearLayout l = (LinearLayout) findViewById(R.id.MyLinearLayout); 
GLSurfaceView s = new GLSurfaceView(this); 
s.setRenderer(myGLRenderer); 

//to add the view with your own parameters 
l.addView(s, new ViewGroup.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT)); 

//or simply use 
l.addView(s,0); 
8

Это то, что я сделал для моего эмиттера частиц: расширить GLSurfaceView и сделать это часть моего макета. Примечание: реализовать класс "ParticleRenderer" для достижения любой OPENGL вещи вы хотите сделать

Мой заказ вид:

public class OpenGLView extends GLSurfaceView 
{ 

    //programmatic instantiation 
    public OpenGLView(Context context) 
    { 
     this(context, null); 
    } 

    //XML inflation/instantiation 
    public OpenGLView(Context context, AttributeSet attrs) 
    { 
     this(context, attrs, 0); 
    } 

    public OpenGLView(Context context, AttributeSet attrs, int defStyle) 
    { 
     super(context, attrs); 

     // Tell EGL to use a ES 2.0 Context 
     setEGLContextClientVersion(2); 

     // Set the renderer 
     setRenderer(new ParticleRenderer(context)); 
    } 

} 

и в макете ...

<com.hello.glworld.particlesystem.OpenGLView 
    android:id="@+id/visualizer" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" /> 

Частица Render прямолинейна ... для примера кода, см .: https://code.google.com/p/opengles-book-samples/source/browse/trunk/Android/Ch13_ParticleSystem/src/com/openglesbook/particlesystem/ParticleSystemRenderer.java

public class ParticleRenderer implements GLSurfaceView.Renderer 
{ 
    public ParticleRenderer(Context context) 
    { 
     mContext = context; 
    } 

    @Override 
    public void onDrawFrame(GL10 gl) 
    { 
     //DO STUFF 
    } 

    @Override 
    public void onSurfaceChanged(GL10 gl, int width, int height) 
    { 
     //DO STUFF 
    } 

    @Override 
    public void onSurfaceCreated(GL10 gl, EGLConfig config) 
    { 
     //DO STUFF 
    } 
} 
Смежные вопросы