2014-10-17 84 views
1

視圖組件我希望把GL表面的頂部的一些看法,我終於想出瞭解決方案與結構:渲染過GLSurfaseView

enter image description here

我有這樣的佈局結構,根佈局 - 的FrameLayout:

<FrameLayout 
    android:layout_width="match_parent" 
    android:layout_height="fill_parent> 

    <GLSurfaceView 
     android:layout_width="fill_parent" 
     android:layout_height="fill_parent" 
     android:layout_marginLeft="100dp" 
     android:layout_marginRight="100dp"/> 

    <RelativeLayout 
     android:layout_width="match_parent" 
     android:layout_height="fill_parent"> 

    // here I put all my views which I want to be on top of GL surface 

    </RelativeLayout> 

</FrameLayout> 

它可以在我的三星Galaxy S3和模擬器(從android SDK和Genymotion)上正常工作。 但在Xperia上失敗,出於某種原因在此設備上GLSurfaceView上的所有圖形對象都不顯示。

您能否給我建議 - 我的方法是否正確,以及在某些設備上會導致問題的原因?

是否有任何其他更正確的方式來顯示視圖從android sdk頂部的GLSurfaceView?

+0

GLSurfaceView不適用於所有設備上的填充和/或邊距。有關解決方法,請參閱此問題的第一條評論; http://stackoverflow.com/questions/8772783/android-how-do-i-resize-the-glsurfaceview-so-i-can-add-buttons-around-the-outsi。 – harism 2014-10-17 10:45:05

+0

你試圖畫的圖像的分辨率是多少? – 2014-10-17 10:55:14

+0

我想繪製gl對象(包括紋理,多段線等),然後我想繪製視圖(按鈕等)在這個gl表面的頂部。所以它不是關於繪製一般圖像 – XZen 2014-10-17 11:01:56

回答

1

背景:GLSurfaceView表面是一個完全獨立的層,由系統合成,而不是應用程序。它將出現在所有視圖的上方或下方,並且不能夾在它們之間。有三種可能的Z順序相對於View層,下面兩個和上面兩個。 Grafika的「多表面測試」演示了多個重疊的透明SurfaceView表面,與Views共享屏幕。

默認情況下,曲面出現在視圖後面,這看起來就是您想要的。如果你沒有看到GLSurfaceView表面,可能是因爲它頂部的View有不透明的背景。我的猜測是,不同設備之間的默認UI主題不同,一個是提供透明度,而另一個不是。

在API 14+上,框架提供了一種混合視圖和曲面的方法,使用TextureView。使用GLES和TextureView並不比GLSurfaceView難 - 你只需要做自己的EGL設置。 Grafika的GLES庫演示瞭如何做到這一點。

+0

謝謝你的迴應。看起來在移動到TextureView的情況下,我也必須實現'queueEvent'方法。 – XZen 2014-10-18 10:11:21

+0

嗯,我需要看看文檔,它只是不是很清楚在哪裏是與GLThread相關的所有'魔術',它包含在GLSurfaceView類:) – XZen 2014-10-18 10:18:34

+0

GLSurfaceView及其關聯的類只是幫助建立在SurfaceView。所有這些都應該轉移到「支持」圖書館。它不需要成爲核心框架的一部分。您真正需要的是設置EGL渲染到Surface,然後開始繪製您選擇的線程。 – fadden 2014-10-18 15:12:02