Android事件和事件监听 来个飞机设个背景图让飞机上下左右动

先贴出画飞机部分的代码,具体代码说明注释里边有

package com.example.planegame;

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

public class PlaneView extends View {

	public float currentX;
	public float currentY;
	
	//创建Bitmap对象,其实就代表一张图片
	Bitmap plane;

	
	public PlaneView(Context context) {
		super(context);
		
		//定义飞机图片
		plane=BitmapFactory.decodeResource(context.getResources(), R.drawable.plane);
		setFocusable(true);
	}
     
	public void onDraw(Canvas canvas){
		super.onDraw(canvas);
		
		//拿到画笔
		Paint p = new Paint();
		
		//用 画笔 在 画布 的 某个位置 去画 飞机
		canvas.drawBitmap(plane,currentX,currentY,p);
	}
	
}


接着贴出具体对应的Activity里边的代码,如下所示,具体说明在注释里看

package com.example.planegame;

import android.os.Bundle;
import android.app.Activity;
import android.util.DisplayMetrics;
import android.view.Display;
import android.view.KeyEvent;
import android.view.View;
import android.view.View.OnKeyListener;
import android.view.Window;

import android.view.WindowManager;

public class PlaneGameActivity extends Activity {


	private int speed=10;
	
	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();
		
		//Andorid.util 包下的DisplayMetrics 类提供了一种关于显示的通用信息,如显示大小,分辨率和字体
		DisplayMetrics metrics = new DisplayMetrics();
		
		//将当前窗口中的一些信息放在DisplayMetrics里面
		display.getMetrics(metrics);
		
		//根据窗口的一些个信息去设置飞机的起始位置
		planeView.currentX = metrics.widthPixels/2;
		//planeView.currentY = metrics.heightPixels-40;
		planeView.currentY = metrics.heightPixels/2;
		
		//为draw组件键盘事件绑定监听器,监听画出来的飞机这一对象
		planeView.setOnKeyListener(new OnKeyListener(){

			@Override
			public boolean onKey(View v, int keyCode, KeyEvent event) {
				
				//获取由哪个键触发的事件
				switch(event.getKeyCode()){
				  //控制飞机上移
				  case KeyEvent.KEYCODE_W:
					  planeView.currentY -= speed;
				      break;
				    //控制飞机下移
				  case KeyEvent.KEYCODE_S:
					  planeView.currentY += speed;
					  
				      break;
				  //控制飞机左移
				  case KeyEvent.KEYCODE_A:
					  planeView.currentX -= speed;
				      break;
				   //控制飞机右移
				  case KeyEvent.KEYCODE_D:
					  planeView.currentX += speed;
				      break;    
				}
				
				//通知planeView组件重画
				planeView.invalidate();
				
				return true;
			}
			
	  });
		
	}

	
}


 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值