【问题标题】:Add view on top of transparent SurfaceView?在透明的 SurfaceView 上添加视图?
【发布时间】:2014-11-16 23:48:26
【问题描述】:

This answer 描述了如何制作具有透明背景的SurfaceView

但是,它需要在 SurfaceView 上调用 setZOrderOnTop(true),这毫不奇怪地将 SurfaceView 置于其他视图之上。

这不是我想要的。鉴于Views ACSurfaceView B 我想将视图排序为A 后面B 后面C

如果B 不是具有透明背景的SurfaceView,则它只是:

<RelativeLayout>
  <ViewA>
  <ViewB>
  <ViewC>
</RelativeLayout>

B 是具有透明背景的SurfaceView 时,是否可以实现这一点?

【问题讨论】:

    标签: android android-layout surfaceview


    【解决方案1】:

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

    • setZOrderOnTop
    • (浏览量)
    • setZOrderMediaOverlay
    • 默认

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

    您可能想要做的是使用TextureView (API 14+),它具有许多相同的属性,但与视图完全交互。如果您使用 Canvas 在 SurfaceView 上绘图,则可以使用自定义 View,它具有hardware accelerated 渲染的额外优势。

    【讨论】:

    • 谢谢。您认为对于paint-esque overlay、TextureView with Canvas 和渲染Thread 或自定义View,哪个性能更好?
    • 在表面上使用 Canvas 进行渲染永远不会被硬件加速。这适用于 SurfaceView 和 TextureView。使用自定义视图可以获得更好的性能。硬件加速渲染器存在一些限制,因此请查看答案中链接的硬件加速页面上支持的功能列表。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多