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;
}
}
- state框架的学习
- Seam框架学习之一(Seam vs Spring -- state vs stateless)
- 设计模式学习笔记——状态(State)模式框架
- state框架详解
- state设计模式--学习总结--state设计模式和策略设计模式的区别
- State 模式学习笔记
- State模式学习
- State模式学习笔记
- state设计模式学习, 一个C++的实现
- 大卫的Design Patterns学习笔记20:State
- Python源码学习九,dfa state的初始化
- 学习收藏: Flex之State状态的…
- React Native 学习笔记四(关于state的使用)
- [React网络整理]React之State的学习笔记
- ReactNative学习实例(一)动态变化的state
- flex3 state和flex4 state的差异
- state.sls和state.highstate的区别
- 2016前端框架的发展趋势(The State Of JavaScript: Front-End Frameworks)
- It is indirectly referenced from required .class files。的解决方法
- 得到AndroidManifest.xml中activity配置的meta-data的值
- iOS8本地通知异常
- 队列的链接存储结构——链队列 图解和代码实现
- (4.2.2.2)【android开源工具】【Android UI设计与开发】第17期:滑动菜单栏(二)开源项目SlidingMenu的示例
- state框架的学习
- NFS服务器安装配置实现Ubuntu 12.04与ARM开发板文件共享
- CMutex使用时的注意事项,以及CMutex::Unlock何时会返回0
- Unity四种坐标系
- Linux内存、性能诊断中vmstat命令的详解
- PAT 1004. Counting Leaves (30)
- 侧边固定导航栏
- How to embed Lua in C++ on Visual Studio
- Python 爬虫 队列