GLSurfaceView / SurfaceView重叠

我之前问了一个关于这个的问题,但没有收到回复,所以我再试一次。

我需要在摩托罗拉Xoom,Android 3.0上做一些带有标签和图形的渲染2D图片。 虽然我只需要SurfaceView(Canvas)或GLSurfaceView就可以完成,但我真的很想使用它们,因为使用GLSurfaceView渲染速度更快,而SurfaceView的标签和图形更容易使用。 视觉布局如下所示。 SurfaceView / GLSurfaceView可视化布局

我试图通过在GLSurfaceView之后在布局XML中声明它来将SurfaceView置于顶部。 SurfaceView是透明的(除了我明确绘制的东西),以便仍然可以看到GLSurfaceView。

这种方法非常适用于一个巨大的例外。 我在GLSurfaceView区域中的SurfaceView上绘制的任何内容都根本不显示。 为了validation这一点,我绘制了一些正好位于边界上的文本(一些位于共享区域,一些位于SurfaceView区域中),并且它在GLSurfaceView边界处被切断。 我已经尝试使用“bringToFront”方法来解决这个问题,但它没有奏效。

任何人都可以给我一些关于为什么这不起作用或我能做些什么的想法? 是GLSurfaceView在前面,还是GLSurfaceView直接写入video内存,所以如果它前面有什么东西并不重要?

SurfaceViews的工作方式将无法满足您的需求。 您必须在GLSurfaceView中渲染文本。

切勿尝试将GLSurfaceView与任何内容(上方或下方)重叠。 充其量它会打破你的设备而你会及早发现它,最糟糕的是它可以在一台设备上运行而不是在其他设备上运行。 咬紧牙关并在GL视图中执行所有操作或不执行任何操作。 如果您需要速度,那么GL就是您要走的路。

我们应该将setZOrderMediaOverlay和setZOrderOnTop设置为true值

setZOrderMediaOverlay

在API级别5中添加void setZOrderMediaOverlay(boolean isMediaOverlay)控制曲面视图的曲面是否放置在窗口中的另一个常规曲面视图的顶部(但仍然在窗口本身后面)。 这通常用于将叠加层放置在底层媒体表面视图的顶部。

请注意,必须在将表面视图的包含窗口附加到窗口管理器之前设置此项。

调用它会覆盖以前对setZOrderOnTop(boolean)的任何调用。

setZOrderOnTop

在API级别5中添加void setZOrderOnTop(boolean onTop)控制曲面视图的曲面是否放置在其窗口的顶部。 通常它放在窗口后面,以允许它(大部分)看起来与层次结构中的视图合成。 通过设置它,您可以将它放在窗口上方。 这意味着此SurfaceView所在窗口的任何内容都不会在其表面上显示。

请注意,必须在将表面视图的包含窗口附加到窗口管理器之前设置此项。

调用此方法会覆盖之前对setZOrderMediaOverlay(boolean)的任何调用。

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