2014-10-17 39 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