2012-08-26 27 views
4

所以,我有我的應用程序一個GLSurfaceView由GLSurfaceView.Renderer被渲染並使用JPCt作爲庫。GL表面和可見性:飄

的表面是不可見的RelativeLayout(能見度:走)。當我將可見性更改爲「可見」,然後返回「已離開」時,佈局將按預期顯示並隱藏,但GLSurfaceView不顯示,只顯示並不會隱藏,即使我可以單擊現在的項目「後面」它。

好像有些圖形緩衝區的問題,但我沒有找到一個方法來得到這個工作...任何想法? 謝謝!

回答

8

SurfaceView(和GLSurfaceView通過擴展名)是Android中有趣的野獸。來自Android javadoc的引文:

表面是Z排序的,以便它在窗口後面保持其 SurfaceView; SurfaceView將在其窗口中打孔以允許顯示其表面。視圖層次結構將採取 照顧與表面正確合成通常會出現在它的上面

Android上的SurfaceView 的兄弟姐妹有一個內置的窗口合成(窗口有一點不同的含義在這裏) 。你的狀態欄是一個窗口,你的活動有一個窗口。但是,如果您的活動包含表面視圖,則會創建另一個窗口,以保持表面,並且android compositor將您的視圖繪製在窗口上。所以SurfaceView實際上只是一個透明區域。當你隱藏它時,該區域沒有被繪製,不會對觸摸做出反應,但是表面窗口仍然存在,android並不足以隱藏窗口。

我會建議兩種解決方案

  • 讓你的表面半透明。然後,您可以當你需要隱藏視圖(Android, Transparent sub-GLSurfaceView in layout?
  • 取下完全視圖層次
  • 另一個有點哈克的方式是繼承GLSurfaceView並調用onDetachedFromWindow()能見度變化時GONE視圖渲染空面。我沒有測試過它,它可能無法正常工作。
+1

謝謝你,真棒答案......我的解決方案#2去了! – arvere

+0

我使用了透明顏色的解決方案1。非常感謝 – Behnam

+1

另一種可能的答案是完全使其關閉屏幕,通過做沿着setX的東西線(view.getMeasuredWidth()),然後setX的(0)當你想回來在屏幕上。如果您不需要半透明的背景和/或您需要視圖來正確測量(當未連接時您不會獲得),這非常有用。 –