gpt4 book ai didi

android - 与 SurfaceView、Camera 和 OpenGL 战斗

转载 作者:塔克拉玛干 更新时间:2023-11-01 22:07:11 27 4
gpt4 key购买 nike

一个多星期以来,我们一直在与 SurfaceViews 相关的一些问题作斗争,但没有找到合适的解决方案。我们阅读了论坛中关于类似问题(甚至 Mixare 源代码)的其他问题,但找不到答案,所以我们希望您能以某种方式帮助我们。

场景:我们有

  • 相机的 SurfaceView
  • OpenGL 层的 SurfaceView,位于相机顶部。
  • 另一个 View ,它显示了一些关于我们可以在屏幕上看到的信息。这个位于两个 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。

我们发现,如果我们在显示 View 的 Activity 中执行 onStart() 后让主线程休眠 4.6 秒(或更长时间),则行为符合预期(显示相机、glsurface 和信息 View ,即使在锁定/解锁)。

问题是,我们正在寻找一个更……优雅的解决方案。

在我们看来,问题是相机在 Camera.open() 中花费的时间比预期的要多,所以添加了相机 View ,添加了 GLSurfaceView,当相机实际打开,它在 GLSurfaceView 的顶部打开。关于这一点,我们在 GLSurfaceView 上使用了 bringToFront(),并将其置于信息 View 之上,但是在锁定/解锁之后,相机仍然在其之上打开,给我们留下了一个带有仅相机预览。

有什么想法吗?我们如何才能同时显示 SurfaceView 和它们之上的信息 View ?

最佳答案

试试这个:

mLayout.addView(mRenderView);
mLayout.addView(mCustomSurfaceView);

// without this line, the camera preview cannot be displayed
// when running activity at first time.
mCustomSurfaceView.setZOrderMediaOverlay(true);

这对我有用:)

关于android - 与 SurfaceView、Camera 和 OpenGL 战斗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5648221/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com