View类是Android的一个超类,找个类几乎包含了所有的屏幕类型。每一个View都有一个拥有绘图的画布,这个画布可以进行任意扩展。
在游戏开发中也可以自定义View,这个画布功能更能满足我们在游戏开发中的需要。在Android中任何一个View类都只需要重写onDraw方法
来实现界面显示,自定义的师徒可以是复杂的3D实现,也可以是非常简单的文本形式等。
Android中提供了onKeyUp,onKeyDown,onKeyMultiple,onKeyPrelme,onTouchEvent等方法,可以轻松处理游戏中的事件信息。
下面是一个例子,画了一个在屏幕上不停变换颜色的矩形(当然你也可以画圆形。。),我们定义一些事件可以通过模拟器的上下键调节矩形
的位置,比如上移或下移。
效果图:
下面是代码
自定义GameView类:
public class GameView extends View {
int miCount=0;
int y=0;
public GameView(Context context) {
super(context);
// TODO Auto-generated constructor stub
}
//画图类
@Override
protected void onDraw(Canvas canvas) {
if(miCount<100){
miCount++;
}else {
miCount=0;
}
//绘图
Paint mPaint=new Paint();
switch(miCount%4){
case 0:
mPaint.setColor(Color.BLUE);
break;
case 1:
mPaint.setColor(Color.GREEN);
break;
case 2:
mPaint.setColor(Color.RED);
break;
case 3:
mPaint.setColor(Color.WHITE);
break;
default:
mPaint.setColor(Color.WHITE);
break;
}
//绘制矩形
canvas.drawRect((320-80)/2,y,(320-80)/2+80,y+40, mPaint);
}
}
刷新视图的类:
public class MainActivity extends Activity {
private static final int REFRESH = 0X00001;
// 声明GameView类对象
private GameView mGameView = null;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// 实例化GameView对象
this.mGameView = new GameView(this);
// 设置显示自定义的View
setContentView(mGameView);
// 开始线程
new Thread(new GameThread()).start();
}
Handler mHandler = new Handler() {
// 接收到消息后处理
public void handleMessage(android.os.Message msg) {
switch (msg.what) {
case MainActivity.REFRESH:
mGameView.invalidate();
break;
}
super.handleMessage(msg);
}
};
class GameThread implements Runnable {
@Override
public void run() {
while (!Thread.currentThread().isInterrupted()) {
Message message = new Message();
message.what = MainActivity.REFRESH;
// 发送消息
mHandler.sendMessage(message);
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
// 触笔事件
public boolean onTouchEvent(MotionEvent event) {
return true;
}
// 按键按下事件
public boolean onKeyDown(int keyCode, KeyEvent event) {
return true;
}
// 按键弹起事件
@Override
public boolean onKeyUp(int keyCode, KeyEvent event) {
switch (keyCode) {
// 上方向键
case KeyEvent.KEYCODE_DPAD_UP:
mGameView.y -= 3;
break;
// 下方向键
case KeyEvent.KEYCODE_DPAD_DOWN:
mGameView.y += 3;
break;
}
return false;
}
@Override
public boolean onKeyMultiple(int keyCode, int repeatCount, KeyEvent event) {
return true;
}
}
注:根据网络资料总结编写