state框架的学习

来源:互联网 发布:淘宝上怎么卖二手东西 编辑:程序博客网 时间:2024/06/10 19:38

一个简单的案例理解state框架:

大致思想就是程序通过不同状态的切换,执行相应的不同的方法......

--------------------------------------------------------------------------------------------------------------------------------------------------

案例需求:


--------------------------------------------------------------------------------------------------------------------------------------------------

类和包:


--------------------------------------------------------------------------------------------------------------------------------------------------

详细设计:

InterfacebaseState{

          VoidDraw(canvas,paint)

          VoidtoucheEvent(x,y)

}

 

ClassMainMenuState implemments BaseState{

          VoidDraw(canvas,paint){

          //画“游戏”

          //画帮助

}

VoidtoucheEvent(x,y)

          If (y>400) //改成helpState

          Else //改成gameState

}

 

Class GameState implements BaseState{

          Draw(){

                    //画游戏

}

touchEvent(){

          //右下角返回

If (x>&& y>)

//改成mainmenuStat

}

}

 

GameView extendsView{

mainmenuState

gameState

helpState

IntcurrentState=1:mainmenu

2:game  3:help

gameView(){

currentState=1;

}

 

Ondraw(){

Switch(currentState)

{

1:mainmenuState.draw()

2:gameState.draw()

3:helpState.draw()

}

}

onTouchEvent(){

Switch(currentState)

{

1:mainmenuState.touchEvent(x,y)

2:gameState.touchEvent()

3:

}

}

}

--------------------------------------------------------------------------------------------------------------------------------------------------

代码

------------包 framework-

package framework;


import android.graphics.Canvas;
import android.graphics.Paint;


public interface BaseState {


public static int MENU_STATE = 1;
public static int GAME_STATE = 2;
public static int HELP_STATE = 3;
/**
* 化界面的方法
*/
void draw( Canvas canvas, Paint paint);
/**
* 事件响应的方法
*/
void tochEvent(int x , int y);
}






package framework;


import state.GameState;
import state.HelpState;
import state.MainMenuState;
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Paint;
import android.view.MotionEvent;
import android.view.View;


public class StateView extends View {


//表示当前状态
public static int currentState;


GameState gameState;
HelpState helpState;
MainMenuState mainMenuState;


public StateView(Context context) {
super(context);
currentState = 1;
gameState = new GameState();
helpState = new HelpState();
mainMenuState = new MainMenuState();

}

@Override
protected void onDraw(Canvas canvas) {
// TODO Auto-generated method stub
super.onDraw(canvas);
Paint paint = new Paint();
paint.setTextSize(58);
paint.setColor(0xFFFF0000);//red

//判断当前状态,执行状态类下面的画界面方法
switch (currentState) {
case BaseState.MENU_STATE:
mainMenuState.draw(canvas, paint);
break;
case BaseState.HELP_STATE:
helpState.draw(canvas, paint);

break;
case BaseState.GAME_STATE:

gameState.draw(canvas, paint);
break;


}
}

@Override
public boolean onTouchEvent(MotionEvent event) {
// TODO Auto-generated method stub
int x=(int) event.getX();
int y=(int) event.getY();
switch (currentState) {
case BaseState.MENU_STATE:

mainMenuState.tochEvent(x, y);
break;
case BaseState.HELP_STATE:

helpState.tochEvent(x, y);
break;
case BaseState.GAME_STATE:

gameState.tochEvent(x, y);
break;


}

//注意这个是更新页面的方法
invalidate();
return super.onTouchEvent(event);
}
}


------------包 state:就举例一个

package state;


import android.graphics.Canvas;
import android.graphics.Paint;
import framework.BaseState;
import framework.StateView;


public class MainMenuState implements BaseState{


@Override
public void draw(Canvas canvas, Paint paint) {


canvas.drawText("Game", 200, 100, paint);
canvas.drawText("Help", 200, 500, paint);

}

@Override
public void tochEvent(int x, int y) {
if (y > 400) {
// 改变状态
StateView.currentState = BaseState.HELP_STATE;// help
} else {
StateView .currentState = BaseState.GAME_STATE;// game
}

}

}

------------MainActivty-

package com.tarena.state;


import framework.StateView;
import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;


public class MainActivity extends Activity {


@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
StateView stateView = new StateView(this);

setContentView(stateView);
}


@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}


}

0 0
原创粉丝点击