我不了解我的主要活动和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.
}
最佳答案
您可以做的一件事是使您的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)