//处理各个SurfaceView发送的消息
Handler myHandler = new Handler(){
        public void handleMessage(Message msg) {
         switch(msg.what)
         {
         case GameMessage.MAINMENU_VIEW:
         //gotoMainMenuView();
         break;
         case GameMessage.GAME_VIEW:
         gotoGameView();
         break;
         }
        }
}

解决方案 »

  1.   

    游戏主界面类public class GameView extends SurfaceView implements SurfaceHolder.Callback{
    MainActivity activity;
    Paint paint;
    //线程引用
    GameViewThread gameViewThread;//游戏界面刷新主线程
    CreatFishThread creatFishThread;////产生金鱼的线程
    //位图引用
    Bitmap bgBitmap;
    Bitmap topBoxBitmap;
    Bitmap bottomBoxBitmap;
    Bitmap btnJianBitmap;
    Bitmap btnJiaBitmap;
    Bitmap btnZTBitmap;
    Bitmap btnJieTu;
    Bitmap btnJinyu;
    Bitmap btnNLBitmap;
    Bitmap[] btn20Bitmap;
    Bitmap[] btnSunBitmap;
    Bitmap[] btnMRYBitmap;
    Bitmap[] btnBXBitmap;
    Bitmap cannonBitmap;//大炮位图
    Bitmap bulletBitmap;//子弹位图
    public Bitmap goldfishBitmap;//金鱼位图

    //列表引用
    public List<Goldfish> allGoldfish;//所有金鱼
    public List<TipText> allTipText;//所有提示文本
    //对象引用
    Cannon cannon;//大炮对象
    public Bullet bullet=null;//子弹对象
    //状态值
    public float angle=(float) (Math.PI/6);//炮筒仰角
    //声音相关变量
    public GameView(MainActivity activity) {
    super(activity);
    this.activity=activity;
    //获得焦点并设置为可触控
    this.requestFocus();
            this.setFocusableInTouchMode(true);
            //注册回调接口
    getHolder().addCallback(this);
    } public void onDraw(Canvas canvas) {
    super.onDraw(canvas);   
    try{
    int w=Constant.SCREEN_W;
    int h=Constant.SCREEN_H;
    Rect rect=new Rect(0, 0, w, h);
    canvas.drawBitmap(bgBitmap, null, rect, paint);
    //绘制子弹
    if(bullet!=null){
    bullet.drawMe(canvas, paint);
    }
    //绘制金鱼
    List<Goldfish> allGoldfish1=new Vector<Goldfish>(allGoldfish);//复制目标列表
    for(Goldfish g : allGoldfish1){
    g.drawMe(canvas, paint);
    }
    //绘制UI
    canvas.drawBitmap(topBoxBitmap, (w-317)/2, 0 , paint);
    canvas.drawBitmap(bottomBoxBitmap, 0, h-85, paint);
    canvas.drawBitmap(btnJianBitmap, 182, h-27, paint);
    canvas.drawBitmap(btnJiaBitmap, 260, h-27, paint);
    canvas.drawBitmap(btnZTBitmap, null, new Rect(10,0,50,40), paint);
    canvas.drawBitmap(btnJieTu, 400, 2, paint);
    canvas.drawBitmap(btnJinyu, 440, 2, paint);
    canvas.drawBitmap(btnNLBitmap,null, new Rect(305,290,305+30,290+30), paint);
    canvas.drawBitmap(btn20Bitmap[0],null, new Rect(350,290,350+30,290+30), paint);
    canvas.drawBitmap(btnSunBitmap[0],null, new Rect(382,290,382+30,290+30), paint);
    canvas.drawBitmap(btnMRYBitmap[0],null, new Rect(414,290,414+30,290+30), paint);
    canvas.drawBitmap(btnBXBitmap[0],null, new Rect(446,290,446+30,290+30), paint);
    canvas.drawText("渔夫", 155, 16, paint);
    canvas.drawText("1", 237, 16, paint);
    //绘制大炮
    cannon.drawMe(canvas, paint);
    //绘制提示文字
    List<TipText> allTipScore=new Vector<TipText>(allTipText);//复制提示文字列表
    for(TipText t : allTipScore){
    t.drawMe(canvas, paint);
    }
    }
    catch(Exception e){
    e.printStackTrace();
    }
    }
    @Override
    public boolean onTouchEvent(MotionEvent event) {
    int x = (int) event.getX();
    int y = (int) event.getY();
         switch(event.getAction()){
         case MotionEvent.ACTION_DOWN:    
         //计算炮筒仰角
    angle=cannon.calcuateAngle(x, y);
         break;
         case MotionEvent.ACTION_MOVE:
         //计算炮筒仰角
    angle=cannon.calcuateAngle(x, y);
         break;
         case MotionEvent.ACTION_UP:
         //创建一个子弹并发射
         bullet=cannon.creatAndSendBullet();
         break;    
         }
    return true;
    }
    public void surfaceChanged(SurfaceHolder holder, int format, int width,
    int height) {
    } public void surfaceCreated(SurfaceHolder holder){
    paint=new Paint();//创建画笔
    paint.setAntiAlias(true);//打开抗锯齿
    initBitmap();//初始化位图资源
    initSounds();//初始化声音资源

    cannon=new Cannon(this,cannonBitmap, bulletBitmap);//创建大炮对象
    allGoldfish=new Vector<Goldfish>();//创建金鱼列表
    allTipText=new Vector<TipText>();//创建提示分数列表

    createAllThreads();//创建所有线程
    startAllThreads();//开始所有线程
    }
    public void surfaceDestroyed(SurfaceHolder holder) { }
    //将图片加载
    public void initBitmap(){
    bgBitmap=BitmapFactory.decodeResource(getResources(), R.drawable.bj01);
    topBoxBitmap=BitmapFactory.decodeResource(getResources(), R.drawable.top_box);
    bottomBoxBitmap=BitmapFactory.decodeResource(getResources(), R.drawable.bottom_box);
    btnJianBitmap=BitmapFactory.decodeResource(getResources(), R.drawable.btn_jian_hv);
    btnJiaBitmap=BitmapFactory.decodeResource(getResources(), R.drawable.btn_jia);
    cannonBitmap=BitmapFactory.decodeResource(getResources(), R.drawable.cannon10_1);
    bulletBitmap=BitmapFactory.decodeResource(getResources(), R.drawable.bullet_test);
    goldfishBitmap=BitmapFactory.decodeResource(getResources(), R.drawable.fish_goldfish);
    btnZTBitmap=BitmapFactory.decodeResource(getResources(), R.drawable.btn_zt);
    btnJieTu=BitmapFactory.decodeResource(getResources(), R.drawable.btn_jietu);
    btnJinyu=BitmapFactory.decodeResource(getResources(), R.drawable.btn_jy);
    btnNLBitmap=BitmapFactory.decodeResource(getResources(), R.drawable.btn_nl);
    btn20Bitmap=new Bitmap[]{
    BitmapFactory.decodeResource(getResources(), R.drawable.icon_201),
    BitmapFactory.decodeResource(getResources(), R.drawable.icon_202)};
    btnSunBitmap=new Bitmap[]{
    BitmapFactory.decodeResource(getResources(), R.drawable.icon_sun1),
    BitmapFactory.decodeResource(getResources(), R.drawable.icon_sun2)};
    btnMRYBitmap=new Bitmap[]{
    BitmapFactory.decodeResource(getResources(), R.drawable.icon_mry1),
    BitmapFactory.decodeResource(getResources(), R.drawable.icon_mry2)};
    btnBXBitmap=new Bitmap[]{
    BitmapFactory.decodeResource(getResources(), R.drawable.icon_bx1),
    BitmapFactory.decodeResource(getResources(), R.drawable.icon_bx2)};
    }
    //初始化声音的方法
    public void initSounds(){ }
    //播放声音的方法
    public void playSound(int sound, int loop) { }
    //结束游戏的方法
    public void overGame(){

    }

    void createAllThreads(){
    gameViewThread=new GameViewThread(this);
    creatFishThread=new CreatFishThread(this);
    }
    void startAllThreads(){
    gameViewThread.setFlag(true);
    creatFishThread.setFlag(true);

    gameViewThread.start();
    creatFishThread.start();
    }
    void stopAllThreads(){
    gameViewThread.setFlag(false);
    creatFishThread.setFlag(false);
    }

    }