在GLSurfaceView上绘制Android UI

对于我的游戏,我正在考虑使用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);
  • Is it good practice to draw UI elements on top of GLSurfaceView or is it better to draw all the UI stuff myself directly to GLSurfaceView?

如果你想要android布局系统提供的灵活性,在GLSurfaceView上绘制android控件似乎是一个好主意.虽然警告这些控件的绘制速度可能比glSurfaceView慢得多,但请确保UI不需要太多的图形功能来渲染,也不会太快更新.

自己渲染一切都是一种选择,但是你失去了从Android UI系统中获得的所有功能.

  • I will be updating the content of the UI elements (Say TextView) regularly (for each 16 ms) by using runOnUiThread() method… Is this bad?

听起来不错.

  • Will my game be susceptible for Force Closes?

这与其他问题没有任何关系.如果你遵循正确的用法并且不引起异常被抛出,那么你应该没事.如果您确实导致异常,那么您的应用将被强制关闭(除非您正确处理异常).

相关文章
相关标签/搜索