-->

在GLSurfaceView的顶部绘制的Android UI(Drawing Android UI

2019-07-18 01:51发布

对于我的比赛,我想绘制UI元素(TextView的用于暂停/重新启动游戏显示时间流逝,按钮)在我之上GLSurfaceView使用RelativeLayout的...

直到现在,我自己直接绘制所有的UI元素surfaceView但考虑到从Android的UI宽选项(如改变字体和颜色的字体),我决定使用它。

问题:

  • 它是很好的做法,借鉴的顶部UI元素GLSurfaceView还是更绘制所有的UI东西自己直接GLSurfaceView
  • 我将更新UI元素(说的内容TextView )定期(每16毫秒)通过runOnUiThread()方法......这是坏?
  • 请问我的比赛是容易的强制关闭?

下面是我使用来设置RelativeLayout的测试java代码... glViewGLSurfaceView实例。

    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);

Answer 1:

  • 它是很好的做法,借鉴GLSurfaceView的顶部UI元素或者是它更好地吸取所有的UI东西自己直接GLSurfaceView?

这似乎是一个好主意画上GLSurfaceView的热门Android的控制,如果你的愿望是,Android的布局系统提供了灵活性。 警告,虽然这些控件可慢得多绘制比你glSurfaceView,所以一定要确保UI并不需要太多的图形功能来呈现,并且不太快更新。

一切都渲染自己是一个选择,但你失去所有的,你可以从Android UI系统中发现的特征。

  • 我将更新UI元素(说的TextView)定期(每16毫秒)通过runOnUiThread()方法的内容......这是坏?

听起来没什么问题。

  • 请问我的比赛是容易的强制关闭?

这不会有什么做的其他问题。 如果你按照正确的使用并不会导致抛出异常,那么你应该罚款。 如果引起异常那么你的应用程序将被强制关闭(除非你妥善处理例外)。



Answer 2:

我这样做是目前在Android游戏我在做,所以我想我会分享我的经验它。

它是很好的做法,借鉴GLSurfaceView的顶部UI元素或者是它更好地吸取所有的UI东西自己直接GLSurfaceView?

我个人认为这是使用内置的UI部件是Android为您绘制你的UI很好的做法。 有一些情况下是不适合,可以在你的游戏区域拖动或具有复杂的动画或行为如UI控件。

如果你是按钮和textViews后,那么我建议你建议的方法。

我将更新UI元素(说的TextView)定期(每16毫秒)通过runOnUiThread()方法的内容......这是坏?

请问我的比赛是容易的强制关闭?

我用的是同一个系统来更新我的UI组件。 我没有必要经常更新每隔16毫秒,但我肯定不具有强制关闭或无响应的用户界面的任何问题。

如果你有很多(我说的是10-20 +)组件定期更新这则是可能的,你可能会遇到无响应的用户界面问题。

你需要更新每16毫秒(约60FPS)的看法? 你可以更新基础值,以保持正确的逻辑,但只更新视图中的每个20-30FPS如果需要降低UI线程上运行的量。

我觉得用户界面并不需要被经常更新你的OpenGL视图,你没有的东西以同样的方式wizzing左右。 如果一个TextView每秒刷新20次,你仍然会得到它不断变化的感觉。



文章来源: Drawing Android UI on top of GLSurfaceView