Android:从GLSurfaceView返回主要活动

时间:2012-11-28 13:37:50

标签: java android opengl-es android-activity renderer

我不明白我的主要活动和OpenGL渲染器之间的流程。

当我的应用程序启动时,用户将看到一个非常漂亮的布局,我使用一个显示“开始渲染”的按钮。当用户单击该按钮时,他/她将被转移到渲染器视图,该视图绘制出令人敬畏的图片。然后当图片完成后,我想返回主屏幕(带按钮的那个),但我不知道如何。

我尝试从GLRenderer调用setContentView(R.layout.activity_run),但显然它不起作用。然后我尝试创建一个函数Run.endRendering(),这是一个静态方法,并从GLRenderer内部调用。 Run.endRendering()应该调用setContentView(R.layout.activity_run),希望它然后将视图传回主屏幕,但由于R.endRendering()是一个静态方法,它不能调用setContentView()的非静态方法。

所以现在我完全迷失了。有人可以对这个问题有所了解吗?

这些是我的骷髅。

主要活动:

public class Run extends Activity
{
    private GLSurfaceView glSurface;

    @Override
    public void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_run);

        // in here I mess with the main layout view the user
        // is supposed to see. when he/she clicks on a button
        // he/she will be transferred to the opengl view

        // on button click:
        glSurface = new GLSurfaceView(this);
        glSurface.setRenderer(new GLRenderer());

        setContentView(glSurface);
    }
}

渲染器:

public class GLRenderer implements Renderer
{
    // onSurfaceCreated, onDrawFrame, onSurfaceChanged, etc.

    // the action happens here. From here I want to return to
    // the main activity that created this renderer.
}

1 个答案:

答案 0 :(得分:0)

您可以做的一件事是让您的GLSurfaceView成为该活动布局的一部分。 活动的UI线程保持运行。在其中创建一个处理程序,它将负责从布局中删除GLSurfaceView并显示正常的非opengl视图。

Handler mainHandler = new Handler() {
    public void handleMessage(Message msg) {
         // remove surfaceview from layout and show non-opengl views
    }
};

然后,您可以将活动的引用(可能使用界面)传递给GLRenderer。哪个可以打电话。

activity.mainHandler.sendMessage(msg)