android学习日记06--游戏开发之View框架

android 游戏开发
三个重要的类:View视图、Canvas画布、Paint画笔
android 游戏开发常用三种视图
View
SurfaceView --主要用于2D
GLSurfaceView --主要用于3D

 

View框架实例

在View上 写"GameView" ,按方向键 上下左右会随之移动,触摸屏幕、拖动也会移到相应位置。

新建MyView类 继承View基类

android学习日记06--游戏开发之View框架
 1 package com.example.gameview;
 2 
 3 import android.content.Context;
 4 import android.graphics.Canvas;
 5 import android.graphics.Color;
 6 import android.graphics.Paint;
 7 import android.view.KeyEvent;
 8 import android.view.MotionEvent;
 9 import android.view.View;
10 
11 public class MyView extends View {
12 
13     private int x=10,y=10;
14     
15     public MyView(Context context) {
16         super(context);
17         setFocusable(true);//设置当前view为焦点操作
18         // TODO Auto-generated constructor stub
19     }
20     
21     @Override
22     protected void onDraw(Canvas canvas) {
23         // TODO Auto-generated method stub
24         Paint paint = new Paint();
25         paint.setColor(Color.BLACK);
26         canvas.drawText("GameView", x, y, paint);
27         
28         super.onDraw(canvas);
29     }
30     
31     @Override
32     public boolean onKeyDown(int keyCode, KeyEvent event) {
33         // TODO Auto-generated method stub
34         if (keyCode == KeyEvent.KEYCODE_DPAD_UP) {
35             y-=2;
36         } else if (keyCode == KeyEvent.KEYCODE_DPAD_DOWN){
37             y+=2;
38         } else if (keyCode == KeyEvent.KEYCODE_DPAD_LEFT){
39             x-=2;
40         } else if (keyCode == KeyEvent.KEYCODE_DPAD_RIGHT){
41             x+=2;
42         }
43         
44         invalidate();
45         //postInvalidate();
46         return super.onKeyDown(keyCode, event);
47     }
48     
49     @Override
50     public boolean onKeyUp(int keyCode, KeyEvent event) {
51         // TODO Auto-generated method stub
52         return super.onKeyUp(keyCode, event);
53     }
54     
55     @Override
56     public boolean onTouchEvent(MotionEvent event) {
57         // TODO Auto-generated method stub
58         int tx = (int)event.getX();
59         int ty = (int)event.getY();
60         //玩家手指点击屏幕的动作
61         if (event.getAction() == MotionEvent.ACTION_DOWN) {
62             x = tx;
63             y = ty;
64             //玩家手指抬起离开屏幕的动作
65         } else if (event.getAction() == MotionEvent.ACTION_MOVE) {
66             x = tx;
67             y = ty;
68             //玩家手指在屏幕上移动的动作
69         } else if (event.getAction() == MotionEvent.ACTION_UP) {
70             x = tx;
71             y = ty;
72         }
73 //        //获取用户手指触屏的X坐标赋值与文本的X坐标
74 //        x = (int)event.getX();
75 //        //获取用户手指触屏的Y坐标赋值与文本的Y坐标
76 //        y = (int)event.getY();
77 //        //重绘画布
78         
79         //重绘画布
80         invalidate();
81         //postInvalidate();
82         return true;
83     }
84 
85 }
View Code

android学习日记06--游戏开发之View框架

需要特别注意的知识点如下:

1、Activity全屏显示

android学习日记06--游戏开发之View框架
1 // 去掉Activity标题栏
2 this.requestWindowFeature(Window.FEATURE_NO_TITLE);
3 // 去掉 电量、时间等状态栏,全屏显示
4 this.getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);
View Code

也可以在AndroidManifest里设置

android学习日记06--游戏开发之View框架
1 android:theme="@android:style/Theme.NoTitleBar.Fullscreen"
View Code

2、设置模拟器方向键生效
C:\Users\XX\.android\avd\XX.avd
config.ini
hw.dPad=no,把no改成yes,如下:
hw.dPad=yes
重启模拟器即可
XX根据个人命名不同而不同

3、重写onDraw方法

android学习日记06--游戏开发之View框架
1 Paint paint = new Paint();// 画笔类
2 paint.setColor(Color.BLACK);// 初始画布为白色,设置画笔为黑色
3 canvas.drawText("GameView", x, y, paint);// 坐标无论横屏竖屏都是从右上角为 0,0点开始的
4 
5 super.onDraw(canvas);
View Code

4、onKeyDown、onKeyUp、onTouchEvent分别表示
按钮 按下、抬起、触摸屏幕的事件
keyCode == KeyEvent.KEYCODE_DPAD_UP 表示 向上的方向键按下

 

5、设置当前view为焦点操作才能进行操作

在MyView 构造方法里 setFocusable(true);

6、重画
invalidate();
//postInvalidate(); 可在自己创建的线程 循环调用

android学习日记06--游戏开发之View框架

上一篇:Android中的多线程处理(二)——使用线程池中的线程


下一篇:android线性布局