如何设置GLSurfaceView.Renderer类以将对象显示到surfaceView或FrameLayout?

时间:2015-06-04 13:57:40

标签: android android-layout opengl-es surfaceview glsurfaceview

今天,我已经在Android中使用OpenGL ES创建了一个3D对象,并考虑将其显示在其他布局中,例如以xml或其他任何可能的方式显示SurfaceView或FrameLayout。

在下面的代码中,我将GL对象设置为onCreate的setContentView以显示我的对象。如果我要在其他地方显示这个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);

    }

1 个答案:

答案 0 :(得分: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);
   }
}

在此之后,您可以在

中创建一个带有自己的GLSurfaceView的xml文件
<?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文件,并从xml文件中获取GLSurfaceView

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());

}