在透明的SurfaceView上添加视图?

7
这篇答案介绍了如何制作一个带有透明背景的SurfaceView
然而,这需要在SurfaceView上调用setZOrderOnTop(true),很显然会将SurfaceView放在其他视图的顶部。
这不完全是我想要的。给定视图ACSurfaceView B,我想按照AB后面,BC后面的顺序排列。
如果B不是一个具有透明背景的SurfaceView,那么它将简单地是:
<RelativeLayout>
  <ViewA>
  <ViewB>
  <ViewC>
</RelativeLayout>

B 是具有透明背景的 SurfaceView 时,是否可能实现此功能?

1个回答

9

当前SurfaceView API有四个可能的层次。从上到下依次为:

  • setZOrderOnTop
  • (视图)
  • setZOrderMediaOverlay
  • 默认

系统合成器合成SurfaceView表面和所有视图的表面。您不能将SurfaceView表面夹在两个视图之间进行Z-order处理。(如果您想了解详细信息,请阅读this article。另请参见Grafika中的多表面测试活动,该活动将三个重叠透明的SurfaceViews软件渲染。)

你可能想要使用一个TextureView(API 14+),它具有许多相同的属性,但可以完全与视图交互。如果你正在使用Canvas在SurfaceView上绘制,你可以尝试使用自定义View,这样可以获得硬件加速渲染的额外优势。

谢谢。您认为用Canvas和渲染线程的TextureView或自定义视图哪个在绘制类似涂鸦的叠加层时性能更好? - GDanger
2
使用Canvas在Surface上进行渲染永远不会得到硬件加速。这适用于SurfaceView和TextureView。使用自定义View可以获得更好的性能。硬件加速渲染器存在一些限制,因此请查看答案中链接的硬件加速页面上支持功能的列表。 - fadden

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