DI有一个GLES20 glsurfaceview,它通过一个messageHandler向我的主要活动发送一个fps状态字符串,我想在GL运行时在屏幕上显示它。
public static Handler messageHandler = new Handler() {
public void handleMessage(android.os.Message msg) {
String message = (String)msg.obj;
Globals.stats.setText(message);
Globals.stats.setVisibility(View.VISIBLE);
Globals.stats.invalidate();
}
};
Global.stats指向屏幕上的文本视图。
在GLES代码运行和更新屏幕期间,不显示textview。 GL渲染停止后,textview会使用上次发送的消息进行更新并显示。
无论如何,我可以告诉OpenGL或surfaceview产生并允许所有UI元素在继续之前更新吗?
布局是一个相对布局,上面有textview,即
<RelativeLayout
android:id="@+id/mainContent"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:focusableInTouchMode="true"
android:background="#ff000000"
android:gravity="fill">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textAppearance="?android:attr/textAppearanceMedium"
android:text="Medium Text"
android:id="@+id/statsTextView"
android:textColor="#ffffffff"
android:layout_alignParentBottom="true"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true"
android:background="#80000000" />
</RelativeLayout>
GLES代码来自网络上的许多示例。一个glsurf类
public class GLSurf extends GLSurfaceView {
private final GLRenderer mRenderer;
public GLSurf(Context context) {
super(context);
setEGLContextClientVersion(2);
mRenderer = new GLRenderer(context);
setRenderer(mRenderer);
setRenderMode(GLSurfaceView.RENDERMODE_WHEN_DIRTY);
}
@Override
public void onPause() {
// TODO Auto-generated method stub
super.onPause();
mRenderer.onPause();
}
@Override
public void onResume() {
// TODO Auto-generated method stub
super.onResume();
mRenderer.onResume();
}
}
和公共课
GLRenderer implements Renderer {
使用
的类 public void onDrawFrame(GL10 unused) {
绘制GLES输出然后使用
MainActivity.messageHandler.sendMessage(msg);
发送fps状态。
有没有更好的方法让GLES运行时更新textview?消息确实被发送和接收,因为一旦GL停止,文本视图将使用最新的帧编号和fps信息进行更新。