【发布时间】:2011-08-04 15:05:35
【问题描述】:
一个多星期以来,我们一直在解决一些与 SurfaceViews 相关的问题,但没有找到合适的解决方案。我们阅读了论坛中有关类似问题的其他问题(甚至是 Mixare 源代码),但找不到答案,因此我们希望您能以某种方式帮助我们。
场景: 我们有
- 相机的 SurfaceView
- 用于 OpenGL 层的 SurfaceView,位于相机顶部。
- 另一个视图,它显示了一些关于我们可以在屏幕上看到的信息。这个位于两个 SurfaceView 之上。
问题:
无论我们如何努力,两个 SurfaceView 显然都不能很好地相处。如果我们尝试:
setContentView(mCameraPreview);
addContentView(mGLSurfaceView, new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));
addContentView(mInfoView, new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));
(这似乎合乎逻辑),在我们锁定/解锁手机之前,一切都按预期进行。之后,GLSurfaceView 就消失了(不是 InfoView,它仍然显示)。
如果我们尝试:
setContentView(mGLSurfaceView);
addContentView(mCameraPreview, new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));
addContentView(mInfoView, new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));
那么问题是 GLSurfaceView 仅在锁定/解锁后出现,在此之前屏幕显示相机和 InfoView。
我们发现,如果我们在显示视图的 Activity 中执行 onStart() 后让主线程休眠 4.6 秒(或更长时间),则行为符合预期(相机、glsurface 和信息视图都显示,即使在之后锁定/解锁)。
问题是,我们正在寻找更...优雅的解决方案。
在我们看来,问题在于相机在Camera.open() 中花费的时间比预期的要长,因此添加了相机视图,添加了 GLSurfaceView,当相机实际打开时,它在 GLSurfaceView 之上打开.关于这一点,我们在 GLSurfaceView 上使用了bringToFront(),并将它放在信息视图的顶部,但在锁定/解锁后相机仍然在它上面打开,只留下一个带有相机预览的屏幕。
有什么想法吗?我们如何在 SurfaceView 上同时显示 SurfaceView 和信息视图?
【问题讨论】:
-
您的问题远远超出了我的知识范围 - 但请确保您按照您应该从容器活动中调用 GLSurfaceView.onPause() 和 GLSurfaceView.onResume() 进行调用。这就是我能想到的关于这个话题的全部内容。
-
看来我们正在尝试解决同样的问题。当我发布my own 时,我没有看到你的问题。你试过
setZOrderMediaOverlay()吗?我试过了,但无法让这种情况发挥作用。也许您可以弄清楚如何使用它并解决此问题。
标签: android opengl-es surfaceview glsurfaceview