我之前问过这个问题,但是没有得到回应,所以我再试一次。
我需要做一个渲染的2D图片与一些附带的标签和图形上的摩托罗拉Xoom,Android 3.0。虽然我需要的东西可以用SurfaceView (Canvas)或GLSurfaceView来完成,但我真的很想使用这两者,因为GLSurfaceView的渲染速度更快,SurfaceView的标签和图形也更容易。可视化布局如下所示。

我试图将SurfaceView放在顶部,方法是在布局XML中的GLSurfaceView之后声明它。SurfaceView是透明的(除了我显式绘制内容的地方),因此仍然可以看到GLSurfaceView。
这种方法工作得很好,但有一个巨大的例外。我在GLSurfaceView区域中的SurfaceView上绘制的任何内容都不会显示。为了验证这一点,我在边界上绘制了一些文本(一些在共享区域,一些在SurfaceView区域),但在GLSurfaceView边界上被截断了。我尝试过使用"bringToFront“方法来解决这个问题,但是没有起作用。
有没有人能告诉我为什么这个方法不起作用,或者我能做些什么?是GLSurfaceView在前面,还是GLSurfaceView直接写入显存,所以前面有什么东西都无关紧要?
发布于 2011-05-03 23:32:45
SurfaceViews的工作方式将使你不可能做你想做的事情。您必须在GLSurfaceView中呈现文本。
发布于 2011-05-03 22:12:18
不要试图将GLSurfaceView与任何东西(高于或低于)重叠。在最好的情况下,它会在你的设备上崩溃,你会提前发现它,最坏的情况下,它会在一个设备上工作,而不是在其他设备上工作。咬紧牙关,在GL视图中做所有的事情,或者什么都不做。如果你需要速度,那么GL是最好的选择。
发布于 2016-10-13 11:10:08
我们应该将setZOrderMediaOverlay和setZOrderOnTop设置为真值
setZOrderMediaOverlay
添加到API level 5 void setZOrderMediaOverlay (boolean isMediaOverlay)控制曲面视图的曲面是否放置在窗口中另一个常规曲面视图的顶部(但仍在窗口本身的后面)。这通常用于将覆盖放置在底层媒体表面视图的顶部。
请注意,必须在曲面视图的包含窗口附加到窗口管理器之前对其进行设置。
调用此函数将覆盖之前对setZOrderOnTop(boolean)的任何调用。
setZOrderOnTop
添加到API level 5 void setZOrderOnTop (boolean onTop)控制曲面视图的曲面是否放置在其窗口的顶部。通常,它被放在窗口后面,以便(在大多数情况下)它看起来与层次结构中的视图合成。通过设置此属性,可以将其放置在窗口的上方。这意味着此SurfaceView所在窗口的任何内容在其表面上都不可见。
请注意,必须在曲面视图的包含窗口附加到窗口管理器之前对其进行设置。
调用此函数将覆盖之前对setZOrderMediaOverlay(boolean)的任何调用。
请访问此链接:http://developer.android.com/reference/android/view/SurfaceView.html#setZOrderMediaOverlay(boolean)
https://stackoverflow.com/questions/5870535
复制相似问题