![](/img/trans.png)
[英]Android TextView on top of GLSURFACEVIEW for Graphing application
[英]Drawing Android UI on top of GLSurfaceView
对于我的游戏,我正在考虑使用RelativeLayout在我的GLSurfaceView
上绘制UI元素(用于显示已用时间的TextView,用于暂停/重新开始游戏的按钮)...
直到现在,我自己直接将所有UI元素绘制到surfaceView,但考虑到Android UI提供的广泛选项(如更改字体和颜色的字体),我决定使用它。
问题:
GLSurfaceView
上绘制UI元素是不错的做法,还是直接将所有UI内容直接绘制到GLSurfaceView
? runOnUiThread()
方法定期更新UI元素的内容(Say TextView
)(每16毫秒)...这样做不好吗? 这是我用来设置RelativeLayout的测试java代码... glView
是GLSurfaceView
实例。
rl = new RelativeLayout(this);
rl.addView(glView);
tv = new TextView(this);
RelativeLayout.LayoutParams lp = new RelativeLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
lp.addRule(RelativeLayout.ALIGN_TOP);
tv.setLayoutParams(lp);
tv.setText("FPS: 0");
tv.setBackgroundColor(0x4060ff70);
rl.addView(tv);
setContentView(rl);
- 在GLSurfaceView上绘制UI元素是不错的做法,还是直接将所有UI内容直接绘制到GLSurfaceView?
如果你想要android布局系统提供的灵活性,在GLSurfaceView上绘制android控件似乎是一个好主意。 虽然警告这些控件的绘制速度可能比glSurfaceView慢得多,但请确保UI不需要太多的图形功能来渲染,也不会太快更新。
自己渲染一切是一个选项,但是你失去了从Android UI系统中获得的所有功能。
- 我将使用runOnUiThread()方法定期更新UI元素的内容(Say TextView)(每16毫秒)...这样做不好吗?
听起来不错。
- 我的游戏是否会受到Force Closes的影响?
这与其他问题没有任何关系。 如果你遵循正确的用法并且不引起异常被抛出,那么你应该没事。 如果您确实导致异常,那么您的应用将被强制关闭(除非您正确处理异常)。
我目前在我正在制作的Android游戏中这样做,所以我想我会分享我的经验。
在GLSurfaceView上绘制UI元素是不错的做法,还是直接将所有UI内容直接绘制到GLSurfaceView?
就个人而言,我认为使用Android为您绘制UI的内置UI小部件是一种很好的做法。 在某些情况下它不适合,例如可以在游戏区域拖动的UI控件或具有复杂动画或行为的UI控件。
如果你在按钮和textViews之后,那么我推荐你建议的方法。
我将使用runOnUiThread()方法定期更新UI元素的内容(Say TextView)(每16毫秒)...这样做不好吗?
我的游戏是否会受到Force Closes的影响?
我使用相同的系统来更新我的UI组件。 我没有必要每16ms更新一次,但我肯定没有任何关于强制关闭或无响应的UI的问题。
如果您经常更新许多(我说的是10-20 +)组件,那么您可能会遇到无法响应的UI问题。
您是否需要每16毫秒(约60FPS)更新视图? 您可以更新基础值以维护正确的逻辑,但只在每次20-30FPS更新View以减少UI线程上运行的数量(如有必要)。
我认为用户界面不需要像你的openGL视图那样频繁更新,因为你没有以同样的方式晃动。 如果textView每秒更新20次,你仍然会感觉它不断变化。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.