Android GLES阻止UI更新

时间:2015-10-04 03:03:25

标签: android user-interface opengl-es-2.0

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信息进行更新。

0 个答案:

没有答案