Android:从SurfaceView更改活动

时间:2013-08-19 14:30:09

标签: android canvas android-activity 2d

我正在用帆布制作游戏。我需要这样做,所以当游戏赢了它会改变活动,但这只能在一个活动文件中完成。 所以我的游戏就像这样:它从MainActivity.class开始,然后创建画布并将其设置为视图。

MainAcitivity.java:

public class MainActivity extends Activity {
private MainGamePanel game;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    requestWindowFeature(Window.FEATURE_NO_TITLE);
    // making it full screen
    getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
            WindowManager.LayoutParams.FLAG_FULLSCREEN);
    // set our MainGamePanel as the View
    game = new MainGamePanel(this, 1);
    setContentView(game);

}
}

MainGamePanel.java:

public class MainGamePanel extends SurfaceView implements
    SurfaceHolder.Callback {

public MainGamePanel(Context context, int lvl) {
    super(context);
    this.context = context;
    Level = lvl;
    getHolder().addCallback(this);
    setFocusable(true);

    thread = new MainThread(getHolder(), this);

    ball = new com.csdevelopers.canvas.sprite.Ball(
            BitmapFactory.decodeResource(getResources(), R.drawable.ball),
            100, 100);
    if (Level == 1) {
        lvl1 = new lvl1(context);
    }

    public void checkWon1(){
    if(lvl1.checkWon(ball)){
        // change Activity HERE!!!
    }
}

}

所以在public void checkWon1()中我无法更改Activity,因为无法从非Activity类调用intent。我怎样才能回到MainActivity并告诉它更改活动?

评论是否需要更多解释。

2 个答案:

答案 0 :(得分:1)

你改变它:

Intent intent = new Intent().setClass(getContext(), ActivityToChange.class);
((Activity) getContext()).startActivity(intent);

答案 1 :(得分:0)

如果你的设置和我的一样,试试

下面的代码将进入surfaceView类

private void passToMainActivity()  {
    ((MainActivity) context).callMe(dead);
}

下一个代码进入您的活动类,用于创建surfaceView类

public void callMe(boolean dead) {
    Intent intent = new Intent(this,MainActivity2.class);
    startActivity(intent);
    finish();
}

取决于您是否有一个具有第二个线程的第三个 java 类,您可能需要暂停该线程

suspend();