Java如何在SurfaceViews之间移动

时间:2015-06-04 04:36:06

标签: java android surfaceview

我正在开发一款游戏,我在如何在主菜单和游戏本身之间移动方面遇到了问题。因此,当游戏开始时,它会将MainMenuPanel设置为第一个视图。然后,我将canvas.draw用于MainMenu中的按钮,当按下它时,它将转到GamePanel

有没有办法可以在MainMenuPanel类中再次使用setContentView? 或者还有其他方法吗? 谢谢!

P.S。我也想过使用ViewGroup,但在我阅读完文档后,我仍然不知道如何使用它。

MainActivity:

public class MainActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    GamePanel gp = new GamePanel(this);
    MainPanel mp = new MainPanel(this);
    //ViewGroup vg = (ViewGroup)(gp.getParent());

    //Remove title
    requestWindowFeature(Window.FEATURE_NO_TITLE);

    //Set fullscreen
    getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);

    setContentView(mp);

    }
}

MainMenuPanel:

public class MainMenuPanel extends SurfaceView implements SurfaceHolder.Callback{
public MainMenuPanel(Context context){
    super(context);

    //Add callback to the surfaceview to intercept events
    getHolder().addCallback(this);

    setFocusable(true);
}
@Override
public void surfaceChanged(SurfaceHolder holder, int format,int width, int height){}

@Override
public void surfaceDestroyed(SurfaceHolder holder){
}

@Override
public void surfaceCreated(SurfaceHolder holder){
}
@Override
public boolean onTouchEvent(MotionEvent event){
    if(event.getAction() == MotionEvent.ACTION_DOWN ){
        //Code to move to GamePanel
        }
        return true;
    }
    if(event.getAction() == MotionEvent.ACTION_UP){
        return true;
    }
    return super.onTouchEvent(event);
}
}
}

的GamePanel:

public class GamePanel extends SurfaceView implements SurfaceHolder.Callback{
private MainThread thread;
public GamePanel(Context context){
    super(context);

    //Add callback to the surfaceview to intercept events
    getHolder().addCallback(this);

    //Make GamePanel focusable so it can handle events
    setFocusable(true);
}
@Override
public void surfaceChanged(SurfaceHolder holder, int format,int width, int height){}

@Override
public void surfaceDestroyed(SurfaceHolder holder){
}

@Override
public void surfaceCreated(SurfaceHolder holder){
}

}
}

1 个答案:

答案 0 :(得分:0)

使用两个SurfaceView没有多大意义,除非你已将它们放在单独的Activity中。 (参见例如Android Breakout,它在主菜单的一个活动中使用View UI,而在游戏本身的第二个活动中使用GLSurfaceView。)

由于您在单个Activity中使用SurfaceView作为菜单和游戏,因此没有理由拥有两个单独的SurfaceView子类。没有理由将SurfaceView子类化,实际上,尽管由于某些原因,许多例子仍在继续这样做。

创建一个SurfaceView,并在其上绘制MainMenuPanel和GamePanel。