2014-09-22 79 views
3

This answer描述瞭如何製作具有透明背景的SurfaceView在透明SurfaceView的頂部添加視圖?

但是它需要在SurfaceView上調用setZOrderOnTop(true),這並不讓人驚訝地將SurfaceView置於其他視圖之上。

這不完全是我想要的。鑑於View s A,CSurfaceViewB我想訂購A後面BC後面的意見。

如果B不是一個SurfaceView具有透明背景,這將僅僅是:

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

是否有可能實現這一目標時B是一個透明背景SurfaceView

回答

5

當前的SurfaceView API有四種可能的圖層。從上到下:

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

的SurfaceView表面,並與所有的視圖的表面上,由系統合成合成。您不能在兩個視圖之間夾入一個SurfaceView曲面。 (如果你想的全部細節,讀this article。另見Grafika多面測試活動,該軟件呈現到三個重疊的透明SurfaceViews。)

你可能想要做的就是使用TextureView(API 14 +),它具有許多相同的屬性,但與Views完全交互。如果您使用Canvas在SurfaceView上繪圖,則可以使用自定義視圖,該視圖具有hardware accelerated渲染的附加優勢。

+0

謝謝。你認爲哪種畫面效果更好?使用Canvas的TextureView和渲染線程或自定義視圖? – GDanger 2014-09-23 16:39:16

+2

用表面上的畫布進行渲染永遠不會硬件加速。這適用於SurfaceView和TextureView。使用自定義View可以獲得更好的性能。硬件加速渲染器有一些限制,因此請在答案中鏈接的硬件加速頁面上查看支持的功能列表。 – fadden 2014-09-23 19:32:17