android - View 未绘制在 GLSurfaceView 之上

标签 android glsurfaceview

我试图在用户按下菜单按钮(暂停游戏)时出现一个暂停菜单。游戏确实成功暂停,但没有绘制任何东西......也许它在我的 GLSurfaceView 下方绘制?这是我的代码。

public class GameActivity extends Activity {

private GLSurfaceView mGLSurfaceView;
private static final String TAG = "Game";
private MainGamePanel mGame;

private View mPauseMessage = null;

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    SharedPreferences prefs = getSharedPreferences("GameSettings", MODE_PRIVATE);

    setContentView(R.layout.main);
    mGLSurfaceView = (GLSurfaceView) findViewById(R.id.glsurfaceview);
    mPauseMessage = findViewById(R.id.pausedMessage);

    mGLSurfaceView.setEGLConfigChooser(false); // 16 bit, no z-buffer

    mGame = new MainGamePanel();
    mGame.setSurfaceView(mGLSurfaceView);

    ....
    mGLSurfaceView.setRenderer(mGame.getRenderer());

}

@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
    boolean result = true;
    if (keyCode == KeyEvent.KEYCODE_MENU) {
        if (mGame.isPaused()) {
            this.resume();
            if (mPauseMessage != null) {
                mPauseMessage.setVisibility(View.GONE);
            }
        } else {
            this.pause();
            if (mPauseMessage != null) {
                mPauseMessage.setVisibility(View.VISIBLE);
            }
        }
    }
    return result;
}

protected void pause() {
    super.onPause();

    mGame.onPause();
    mGLSurfaceView.onPause();
}


protected void resume() {
    super.onResume();

    mGame.onResume();
    mGLSurfaceView.onResume();
}

从我的 XML 中:

<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>
<android.opengl.GLSurfaceView xmlns:android="http://schemas.android.com/apk/res/android" 
            android:id="@+id/glsurfaceview"
        android:layout_width="fill_parent" 
        android:layout_height="fill_parent"
    />
    <LinearLayout
        android:id="@+id/pauseMenu"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:visibility="gone">
    <ImageView 
    android:id="@+id/pausedMessage"
    android:src="@drawable/pause"
    android:layout_height="wrap_content" 
    android:layout_width="wrap_content" 
    android:layout_gravity="center"/>
</LinearLayout>
</FrameLayout>

最佳答案

也许你在某处有一句台词说:

mGLSurfaceView.setZOrderOnTop(true);

它会覆盖 OpenGL 以在任何内容之上绘制,即使您在 RelativeLayout 中有其他 View 在其之上也是如此。如果有,请尝试将其注释掉。

否则你可以试试这个:(谢谢 user2610335)

mGLSurfaceView.setZOrderOnTop(false)

关于android - View 未绘制在 GLSurfaceView 之上,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10416434/

相关文章:

android - 如何在android中检查共享首选项是否为空?

Android:跨屏幕旋转保留 EGLContext

android - 将相机渲染到多个表面 - 屏幕上和屏幕外

android - 在 KeyguardRestrictedInputMode() 中返回失败结果

android - 打开带有空格的本地 Android 文件

android - 在 GLSurfaceView 上覆盖 xml 布局的最佳实践?

android view 和 surfaceView,我该用哪个?

android - 如何在 Android 上正确使用 setZOrderMediaOverlay?

android - Realm 在 executeTransactionAsync 的 onSuccess 回调中关闭错误

java - 重启设备后如何使用bootreciever设置壁纸? (安卓, eclipse )