Android:从 GLSurfaceView 返回主要活动
Posted
技术标签:
【中文标题】Android:从 GLSurfaceView 返回主要活动【英文标题】:Android: returning to main activity from GLSurfaceView 【发布时间】:2012-11-16 09:08:10 【问题描述】:我不明白我的主要活动和 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.
【问题讨论】:
使用 2 项活动,一项用于您的主要活动,一项用于您的 Open GL。 【参考方案1】:您可以做的一件事是让您的 GLSurfaceView 成为该活动布局的一部分。 Activity 的 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)
【讨论】:
以上是关于Android:从 GLSurfaceView 返回主要活动的主要内容,如果未能解决你的问题,请参考以下文章
使用 GLSurfaceView Android 进行旋转和捏合缩放的图像效果
android-glsurfaceview Activity框架程序
android使用GLSurfaceView搭建OpenGL环境