GLSurfaceView和SurfaceView重叠

3
我之前问过这个问题,但没有得到回复,所以我再试一次。
我需要在Motorola Xoom,Android 3.0上做一个渲染的2D图片,并附带一些标签和图形。虽然只使用SurfaceView(Canvas)或只使用GLSurfaceView就可以完成我需要的功能,但我真的想同时使用两者,因为GLSurfaceView的渲染速度更快,而SurfaceView的标注和图形更容易。视觉布局如下所示。 SurfaceView/GLSurfaceView visual layout 我尝试通过在GLSurfaceView之后在layout XML中声明SurfaceView来将其置于顶部。 SurfaceView是透明的(除了我明确绘制的内容),因此仍然可以看到GLSurfaceView。
这种方法效果不错,但有一个很大的例外。我在SurfaceView上绘制的任何位于GLSurfaceView区域内的内容都完全不会显示出来。为了验证这一点,我在边界上绘制了一些文本(一些在共享区域中,一些仅在SurfaceView区域中),结果在GLSurfaceView边界处被切掉了。我已经尝试使用“bringToFront”方法来解决这个问题,但它没有起作用。
有人能给我一些关于为什么这不起作用或我该怎么做的想法吗?是因为GLSurfaceView在前面,还是因为GLSurfaceView直接写入视频内存,所以无论前面有什么都无所谓?
3个回答

4
表面视图(SurfaceViews)的工作方式将使您无法实现所需功能。您将需要在GLSurfaceView中渲染文本。

3

不要尝试将GLSurfaceView与任何东西(上面或下面)重叠。最好情况是它在您的设备上崩溃,您可以及早发现,最坏情况是它在某些设备上工作,在其他设备上则不行。勇敢地在GL视图中完成所有内容或者不要使用它。如果需要速度,则使用GL是正确的选择。


2
在我的应用程序中,我在一个 FrameLayout 堆栈中的 GLSurfaceView 之上叠加了许多元素(按钮、LinearLayout、自定义视图等...但没有 SurfaceView)。它运行得非常完美,在大约 280,000 次下载和约 2000 封支持邮件后,我从未听说过任何问题。请详细说明您遇到或了解到的具体问题。 - undefined
上次我尝试在GLSurfaceView上放置文本时,帧率下降了,而且文本的背景看起来很奇怪。我参与了几个电子邮件讨论组,其中有类似的问题。也许你找到了一个完美的组合,或者我们都只是非常不幸。 - undefined
1
好的,谢谢。我对这个问题不太了解。我会尝试提出一个具体的问题来澄清。 - undefined

2
我们应该将setZOrderMediaOverlay和setZOrderOnTop的值设置为true。
setZOrderMediaOverlay控制SurfaceView的表面是否放置在窗口中另一个常规SurfaceView的顶部(但仍在窗口本身后面)。这通常用于在底层媒体SurfaceView上放置覆盖层。
请注意,这必须在SurfaceView的包含窗口附加到窗口管理器之前设置。
调用此操作会覆盖先前对setZOrderOnTop(boolean)的任何调用。
setZOrderOnTop控制SurfaceView的表面是否放置在其窗口的顶部。通常它被放置在窗口后面,以允许它(大多数情况下)与层次结构中的视图合成。通过设置此项,您会导致它被放置在窗口之上。这意味着在此SurfaceView所在的窗口中的任何内容都不会在其表面上方可见。
请注意,这必须在SurfaceView的包含窗口附加到窗口管理器之前设置。

调用此方法将覆盖先前对setZOrderMediaOverlay(boolean)方法的调用。

请参考此链接: http://developer.android.com/reference/android/view/SurfaceView.html#setZOrderMediaOverlay(boolean)


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接