2014-01-30 71 views
2

只是一個普遍的問題:我有一個具有SurfaceView的片段。當我通過FragmentManager隱藏片段時,SurfaceView仍然可見。爲什麼片段隱藏時,片段中的SurfaceView仍然可見?

我發現一個解決方法,只需將視圖設置爲INVISIBLE/GONE/VISIBLE當片段隱藏/可見 - 但我想知道:爲什麼SurfaceView仍然顯示?是因爲SurfaceView基本上是一個「打孔」,這意味着它不在碎片的Layout-Hierarchy中,因此在佈局隱藏時無法隱藏?

什麼是用碎片做隱藏過程?它是否簡單地將創建的視圖去掉?

回答

3

A SurfaceView創建一個完全獨立的圖形層,由系統合成。 「洞」包含在視圖層次結構中,因此佈局正確。當涉及SurfaceView時,有很多事情不太正確。

A TextureView相反,實際上是視圖本身的一部分,並且會採取適當的行動。缺點是有一個額外的步驟,像素從屏幕外緩衝區複製到視圖中。這是通過GPU完成的,因此速度非常快,但如果您嘗試在播放全長電影時以60fps的大部分屏幕製作動畫或將電量消耗降至最低,那麼SurfaceView可能是更好的選擇。

如果使用TextureView是一個選項,那麼這樣做可能會讓您的生活變得更簡單。

+0

謝謝您的回覆!我會使用TextureView,但afaik沒有可用的Android Api> 8的「GLTextureView」(好吧,可能會有一些開源的,但我更願意「測試」代碼) – Frame91

+0

啊。在API 14之前根本沒有'TextureView',所以如果你需要在2.x上運行它不是一個選項。根據http://developer.android.com/about/dashboards/index.html,通過定位舊的API級別,您可能會達到23%左右。 – fadden