在透明SurfaceView上添加视图?

GDa*_*ger 4 android surfaceview android-layout

这个答案描述了如何SurfaceView使用透明背景.

然而,它需要setZOrderOnTop(true)被调用SurfaceView,这毫不奇怪地放在SurfaceView其他视图的顶部.

这不是我想要的.鉴于View小号A,CSurfaceView B我想订购的意见A背后B的后面C.

如果B不是SurfaceView透明背景,那么这只是:

<RelativeLayout>
  <ViewA>
  <ViewB>
  <ViewC>
</RelativeLayout>
Run Code Online (Sandbox Code Playgroud)

当具有透明背景时,是否可以实现此B目的SurfaceView

fad*_*den 5

当前的SurfaceView API有四个可能的层.从上到下:

  • setZOrderOnTop
  • (查看)
  • setZOrderMediaOverlay
  • 默认

SurfaceView曲面和包含所有视图的曲面由系统合成器合成.你不能在两个视图之间将Z-order三明治夹在中间.(如果您需要完整的详细信息,请阅读本文.另请参阅Grafika中的多表面测试活动,该软件将渲染为三个重叠的透明SurfaceView.)

您可能想要做的是使用TextureView(API 14+),它具有许多相同的属性,但与Views完全交互.如果您使用Canvas在SurfaceView上绘图,则可以使用自定义视图,该视图具有硬件加速渲染的附加优势.

  • 在表面上使用Canvas渲染永远不会硬件加速.这适用于SurfaceView和TextureView.使用自定义视图可以获得更好的性能.硬件加速渲染器有一些限制,因此请查看答案中链接的硬件加速页面上支持的功能列表. (2认同)