当调用onResume时,后台变为空白

时间:2012-09-25 19:52:19

标签: android background dialog surfaceview onresume

我有透明活动的Dialog,它就像一个暂停菜单,所以当显示对话框并按Home按钮时,一切正常,但当我重新打开时Dialog显示,除了背景是空白的。游戏是使用canvasSurfaceView制作的,因此我无法在该屏幕上显示Dialog或我可以,因为我正在尝试但每次都会收到错误

所以,当我按下后退键Dialog完美显示时:

enter image description here

但是当我点击主页按钮并长按主页按钮重新打开应用程序时,我得到了这个:

enter image description here

onResume代码:

@Override
    protected void onResume() {
        super.onResume();
        ourSurfaceView.resume();
    }

public void resume() {
            isRunning = true;
            ourThread = new Thread(this);
            ourThread.start();
        }

显示Dialog的活动:

public class ShowPopUp extends Activity {

    Dialog myDialog;
    GameSurface ourSurfaceView;
    Button toMenu;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.showpopupmain);

        myDialog = new Dialog(ShowPopUp.this);
        myDialog.setContentView(R.layout.showpopup);
        myDialog.setTitle("Paused");
        myDialog.setCancelable(true);
        Button button = (Button) myDialog.findViewById(R.id.Btn1);
        toMenu = (Button)myDialog.findViewById(R.id.Btn2);
        toMenu.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                finish();
                Intent menu = new Intent(
                        "com.example.mygame.Menu");
                startActivityForResult(menu, 5);
            }
        });

        button.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v) {
                myDialog.dismiss();
                finish();
            }
        });
        myDialog.show();
        myDialog.setOnCancelListener(new DialogInterface.OnCancelListener() {

            @Override
            public void onCancel(DialogInterface dialog) {
                ShowPopUp.this.finish();

            }
        });

    }
}

1 个答案:

答案 0 :(得分:0)

扩展凯西的评论: 您是否可以尝试关闭活动的onPause()内的对话框,看看SurfaceView是否恢复? 如果是,则可以使用onResume()再次显示对话框(恢复曲面后)。

你应该在你的表面/游戏循环中有一个额外的标志来跟踪暂停/恢复的游戏状态(不仅仅是绘制状态),这样你就可以在不推进实际游戏的情况下运行绘图循环(因此它是可见的)。 / p>