package com.crazyit.ui.viewlistener;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.Paint;
import android.view.View;
/**
* 作者:Gaao on 2016/6/5 19:52
*/
public class PlaneView extends View {
public float currentX;
public float currentY;
Bitmap bitmap;
public PlaneView(Context context) {
super(context);
//定义飞机的图片
bitmap = BitmapFactory.decodeResource(context.getResources(),R.drawable.plane);
setFocusable(true);
}
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
//创建画笔
Paint paint = new Paint();
//绘制飞机
canvas.drawBitmap(bitmap,currentX,currentY,paint);
}
}
该实例直接使用 planeView 作为 Activity 显示的内容,并为planeView增加键盘事件监听监听器.
处理View的 Activity
package com.crazyit.ui.viewlistener;
import android.app.Activity;
import android.os.Bundle;
import android.util.DisplayMetrics;
import android.view.Display;
import android.view.KeyEvent;
import android.view.View;
import android.view.Window;
import android.view.WindowManager;
/**
* 飞机游戏的 例子
*/
public class PlaneGameActivity extends Activity {
//定义飞机移动的速度
private int speed = 10;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//去掉窗口的标题
requestWindowFeature(Window.FEATURE_NO_TITLE);
//全屏显示
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);
//创建planeView组件
final PlaneView planeView = new PlaneView(this);
setContentView(planeView);
planeView.setBackgroundResource(R.drawable.back); //设背景
//获取窗口管理器
WindowManager windowManager = getWindowManager();
Display display = windowManager.getDefaultDisplay();
final DisplayMetrics metrics = new DisplayMetrics();
//获得屏幕的宽和高
display.getMetrics(metrics);
//设置飞机的初始位置
planeView.currentX = metrics.widthPixels / 2;
planeView.currentY = metrics.heightPixels - 40;
//为 planeView 组件添加 键盘监听事件
planeView.setOnKeyListener(new View.OnKeyListener() {
@Override
public boolean onKey(View v, int keyCode, KeyEvent event) {
//获取是由哪一个键 触发的事件
switch (event.getKeyCode()) {
//控制飞机下移
case KeyEvent.KEYCODE_S:
planeView.currentY += speed;
if (planeView.currentY>metrics.heightPixels){
planeView.currentY=metrics.heightPixels-50;
}
break;
//控制飞机上移
case KeyEvent.KEYCODE_W:
planeView.currentY -= speed;
if (planeView.currentY<0){
planeView.currentY=0;
}
break;
//控制飞机左移
case KeyEvent.KEYCODE_A:
planeView.currentX -= speed;
if (planeView.currentX<0){
planeView.currentX=0;
}
break;
//控制飞机右移
case KeyEvent.KEYCODE_D:
planeView.currentX += speed;
if (planeView.currentX>metrics.widthPixels){
planeView.currentX=metrics.widthPixels;
}
break;
}
//通知 planeView 组件重绘
planeView.invalidate();
return true;
}
});
}
}