键盘事件的监听-控制飞机移动

package com.onclick;

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 MainActivity 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 PlainView plainView=new PlainView(this);
        //填充Plainview
        setContentView(plainView);
        plainView.setBackgroundResource(R.drawable.back);
        //获取窗口管理器
        WindowManager windowManager=getWindowManager();
        Display display=windowManager.getDefaultDisplay();
        DisplayMetrics metrics=new DisplayMetrics();
        //获得屏幕宽和高
        display.getMetrics(metrics);
        //设置飞机的初始位置
        plainView.currentX=metrics.widthPixels/2;
        plainView.currentY=metrics.heightPixels-40;
        //为planeView组件的键盘事件绑定监听器
        plainView.setOnKeyListener(new View.OnKeyListener() {
            @Override
            public boolean onKey(View source, int keyCode, KeyEvent event) {
                //获取由哪个键触发的事件
                switch (event.getKeyCode()){
                    //控制飞机下移
                    case KeyEvent.KEYCODE_S:
                        plainView.currentY=plainView.currentY+speed;
                        break;
                    //控制飞机上移
                    case KeyEvent.KEYCODE_W:
                        plainView.currentY=plainView.currentY-speed;
                        break;
                    //控制飞机左移
                    case KeyEvent.KEYCODE_A:
                        plainView.currentX=plainView.currentX-speed;
                        break;
                    //控制飞机右移
                    case KeyEvent.KEYCODE_D:
                        plainView.currentX=plainView.currentX+speed;
                }
                //通知planinview组件重绘
                plainView.invalidate();
                return true;
            }
        });
    }
}


package com.onclick;

import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.Paint;
import android.view.View;

/**
 * 自定义view,该view负责绘制游戏的飞机
 * Created by Helen on 2016/5/5.
 */
public class PlainView extends View{
    Bitmap plane;
    public float currentX;
    public float currentY;

    public PlainView(Context context) {
        super(context);
        plane= BitmapFactory.decodeResource(context.getResources(),R.drawable.plane);
        setFocusable(true);
    }

    @Override
    protected void onDraw(Canvas canvas) {
        super.onDraw(canvas);
        //创建画笔
        Paint p=new Paint();
        //绘制飞机
        canvas.drawBitmap(plane,currentX,currentY,p);
    }
}




    




你可能感兴趣的:(Android开发)