在GLSurfaceView上覆盖xml布局的最佳实践?

时间:2014-01-13 05:55:46

标签: android android-layout android-fragments fragment glsurfaceview

我正在阅读最近的一本书(学习OpenGL ES For Mobile游戏和图形开发)中的示例,并建议在主要活动中以编程方式添加新布局(让我们称之为settingsLayout),然后:< / p>

 LayoutInflater settingsInflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);
 View settingsLayoutView = settingsInflater.inflate(R.layout.mySettingsLayout,settingsLayout,false);
 settingsLayout.addView(settingsLayoutView);
 addContentView(settingsLayout,settingsLayoutParams);

这很好用,但我已将其添加到我的某个操作栏菜单项的回调中,并且我希望能够在使用后退按钮时删除此视图。到目前为止,这让我很头疼。

同时,实现动态视图(可添加到backstack等)的最自然方式似乎是通过Fragments。但是,片段需要属于布局,目前我的代码将GLSurfaceView直接指定为我的主要活动的内容视图,而根本不使用布局。由于GLSurfaceView是View的子类(而不是View Group),因此我无法使用它来生成片段等子元素。

该书的作者声称这种方法很“流畅”,但没有给出任何其他理由直接将GLSurfaceView指定为内容视图。是否存在需要注意的性能问题?或者,我的GLSurfaceView和随后产生的视图都属于“主”布局,它是否“光滑”?

还有其他更自然的方式让按钮,文本框等动态显示并消失在我的GLSurfaceView上吗?

1 个答案:

答案 0 :(得分:1)

我不确定您的具体性能问题是什么 - 渲染View对象或渲染GL?你所做的任何事情都不会影响GL渲染的性能(除了可能改变窗口的大小)。

SurfaceViewGLSurfaceView在视图层次结构中提供透明的“占位符”,其他元素在计算布局时使用,但实际像素在单独的图层上绘制。这就是为什么SurfaceView要么在所有View元素的后面,要么在它们的前面 - 层将传递给系统合成器(SurfaceFlinger),它负责生成最终的显示图像。