使用安卓虚拟按键控制小飞机的移动小demo
小飞机的View
public class plain extends View{
public float x; 这是定义的飞机的x轴 位置坐标
public float y;
Bitmap plain; 新建plain
public plain(Context context) {
super(context);
plain = BitmapFactory.decodeResource(context.getResources(), R.drawable.ic_launcher); 为plain设置资源 一个飞机的图片
setFocusable(true); 设置可成为焦点 可以绑定监听事件
}
public void onDraw(Canvas canvas){ 画布
super.onDraw(canvas);
Paint p = new Paint(); 新建画笔
canvas.drawBitmap(plain, x, y, p); 画图
}
}
主Activity
public class MainActivity extends ActionBarActivity {
private int spend = 10; 设置初始的速度
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//setContentView(R.layout.activity_main);
requestWindowFeature(Window.FEATURE_NO_TITLE); 设置全屏
final plain plainv = new plain(this); 创建plain类
setContentView(plainv);
//plainv.setBackgroundResource(R.drawable.bk);
WindowManager windowmangr = getWindowManager();
Display display = windowmangr.getDefaultDisplay();
DisplayMetrics metrics = new DisplayMetrics(); 获取到屏幕宽高
display.getMetrics(metrics);
plainv.x = metrics.widthPixels/2;
plainv.y = metrics.widthPixels-40;
plainv.setOnKeyListener(new OnKeyListener() { 设置键盘监听事件
@Override
public boolean onKey(View source, int keycode, KeyEvent event) {
switch (event.getKeyCode()) {
case KeyEvent.KEYCODE_S:
plainv.y += spend;
break;
case KeyEvent.KEYCODE_W:
plainv.y -= spend;
break;
case KeyEvent.KEYCODE_A:
plainv.x -= spend;
break;
case KeyEvent.KEYCODE_D:
plainv.x += spend;
break;
default:
break;
}
plainv.invalidate();
return true;
}
});
}
}