首先正式在制作飞机打战之前我们先把所需的图片导入Android Studio中放在app/main/res/dawable/,目录下;(导入的方法直接复制图片,之后选中dawable文件夹粘贴即可)
主界面总体包括:
一.GameSurface类
内有包括:
1.画图所需的属性
//画图
private
SurfaceHolder
surfaceHolder;//包装类
private
Canvas canvas;
//画布
private
Paint paint;
//画笔
//与屏幕坐标
public static int
screenWidht;
//屏幕宽度
public static int
screenHight;
//屏幕高度
//Menu相关的
图片元素
private
GameMenu gameMenu;
private
Bitmap bmpMenuBG;
//背景图片
private
Bitmap bmpMenuLogo;
//菜单页面Logo
private
Bitmap bmpMenuButton;//菜单页面按钮
private
Bitmap bmpMenuTxt;
2.继承extends
SurfaceView类时需要重写的GameSurface(Context context)类
public
GameSurface(Context context) {
super(context);
surfaceHolder
= this.getHolder();//初始化holder(类似于工具)
surfaceHolder.addCallback(this);//回调函数
paint
= new
Paint(); //初始化画笔
paint.setAntiAlias(true);
//抗锯齿
}
3.实现surfaceCreated.Callback接口时会产生(三个方法),将(SurfaceHolder
holder)类进行重写了 , 添加一个主线程(new Thread)。
@Override
public void
surfaceCreated(SurfaceHolder holder) {
screenWidht
= this.getWidth();
screenHight
= this.getHeight();
initBitmap();
new
Thread(new
Runnable() {
@Override
public void
run() {
MyDraw();
}
}).start();
}
4,初始化画图工具方法MyDraw(),
/**
*
绘图方法
*/
private void
MyDraw() {
//画布锁定初始化
canvas
= surfaceHolder.lockCanvas();
gameMenu.drow(canvas,
paint);//实例化的gameMenu调用drow方法画出图片
if
(canvas
!= null) {
surfaceHolder.unlockCanvasAndPost(canvas);
}
}
5.initBitmap(),初始化图片元素的方法把图片转化成BitmapFactory类型的图片
private void
initBitmap() {
//把图片转化成BitmapFactory
bmpMenuBG
= BitmapFactory.decodeResource(
this.getResources(),
R.drawable.mainmenu);
bmpMenuButton
= BitmapFactory.decodeResource(
this.getResources(),
R.drawable.menustart);
bmpMenuTxt
= BitmapFactory.decodeResource(
this.getResources(),
R.drawable.starttext);
bmpMenuLogo
= BitmapFactory.decodeResource(
this.getResources(),
R.drawable.logo);
//初始化
gameMenu
= new
GameMenu(bmpMenuBG,
bmpMenuLogo,
bmpMenuButton,
bmpMenuTxt);
}
完成后:
package
com.example.gamemean;
import
android.content.Context;
import
android.graphics.Bitmap;
import
android.graphics.BitmapFactory;
import
android.graphics.Canvas;
import
android.graphics.Paint;
import
android.icu.util.Calendar;
import
android.os.Build;
import
android.support.annotation.RequiresApi;
import
android.view.Menu;
import
android.view.SurfaceHolder;
import
android.view.SurfaceView;
/**
* Created by
小泽
on 2017/5/24.
*/
@RequiresApi(api = Build.VERSION_CODES.N)
public class
GameSurface extends
SurfaceView implements
SurfaceHolder.Callback {
private
SurfaceHolder surfaceHolder;//包装类
private
Canvas canvas;
//画布
private
Paint paint;
//画笔
public static int
screenWidht;
//屏幕宽度
public static int
screenHight;
//屏幕高度
//Menu相关的
private
GameMenu gameMenu;
private
Bitmap bmpMenuBG;
//背景图片
private
Bitmap bmpMenuLogo;
//菜单页面Logo
private
Bitmap bmpMenuButton;//菜单页面按钮
private
Bitmap bmpMenuTxt;
public
GameSurface(Context context) {
super(context);
surfaceHolder
= this.getHolder();//初始化holder(类似于工具)
surfaceHolder.addCallback(this);//回调函数
paint
= new
Paint(); //初始化画笔
paint.setAntiAlias(true);
//抗锯齿
}
@Override
public void
surfaceCreated(SurfaceHolder holder) {
screenWidht
= this.getWidth();
screenHight
= this.getHeight();
initBitmap();
new
Thread(new
Runnable() {
@Override
public void
run() {
MyDraw();
}
}).start();
}
@Override
public void
surfaceChanged(SurfaceHolder holder,
int
format, int
width, int
height) {
}
@Override
public void
surfaceDestroyed(SurfaceHolder holder) {
}
/**
*
绘图方法
*/
private void
MyDraw() {
//画布锁定初始化
canvas
= surfaceHolder.lockCanvas();
gameMenu.drow(canvas,
paint);//实例化的gameMenu调用drow方法画出图片
if
(canvas
!= null) {
surfaceHolder.unlockCanvasAndPost(canvas);
}
}
private void
initBitmap() {
//把图片转化成BitmapFactory
bmpMenuBG
= BitmapFactory.decodeResource(
this.getResources(), R.drawable.mainmenu);
bmpMenuButton
= BitmapFactory.decodeResource(
this.getResources(), R.drawable.menustart);
bmpMenuTxt
= BitmapFactory.decodeResource(
this.getResources(), R.drawable.starttext);
bmpMenuLogo
= BitmapFactory.decodeResource(
this.getResources(), R.drawable.logo);
//初始化
gameMenu
= new
GameMenu(bmpMenuBG,
bmpMenuLogo,
bmpMenuButton,
bmpMenuTxt);
}
}
二.GameMenu类
package com.example.gamemean;
import
android.graphics.Bitmap;
import
android.graphics.Canvas;
import
android.graphics.Paint;
import
android.graphics.Rect;
/**
* Created by
小泽
on 2017/5/24.
*/
public class
GameMenu {
private
Bitmap bmpMenuBG;
//背景图片
private
Bitmap
bmpMenuLogo;
//菜单页面Logo
private
Bitmap
bmpMenuButton;//菜单页面按钮
private
Bitmap
bmpMenuTxt;//菜单页面文本
private
Rect
rect;
//创建一个长方形,放置飞机大战LOGO,因为logo图片过大,所以先填充一个长方体
//构造函数初始化
public
GameMenu(Bitmap bmpMenuBG, Bitmap bmpMenuLogo, Bitmap bmpMenuButton, Bitmap bmpMenuTxt) {
this.bmpMenuBG
= bmpMenuBG;
this.bmpMenuButton
= bmpMenuButton;
this.bmpMenuLogo
= bmpMenuLogo;
this.bmpMenuTxt
= bmpMenuTxt;
rect
=
new
Rect(0,
GameSurface.screenHight
/
3, GameSurface.screenWidht,
GameSurface.screenHight
/
3
+ GameSurface.screenHight
/
5);
//此处三个参数
}
/**
*
画图
*
* @param
canvas
*
@param paint
*/
public
void drow(Canvas canvas, Paint paint) {
//菜单背景
canvas.drawBitmap(bmpMenuBG,
0,
0, paint);
//画飞机大战logo,放入长方形中
canvas.drawBitmap(bmpMenuLogo,
null,
rect, paint);
//画按钮
int
x = GameSurface.screenHight
/
3
*
2;
int
y = GameSurface.screenWidht
/
2
-
bmpMenuButton.getWidth() /
2;
canvas.drawBitmap(bmpMenuButton,
y, x, paint);
//画文本
int
m = y +
bmpMenuButton.getWidth() /
6;
int
n = x +
bmpMenuButton.getHeight() /
6;
canvas.drawBitmap(bmpMenuTxt,
m, n, paint);
//
}
}
注意:个元素坐标需要进行调试
三.MainActivity类
package
com.example.gamemean;
import
android.os.Build;
import
android.support.annotation.RequiresApi;
import
android.support.v7.app.AppCompatActivity;
import
android.os.Bundle;
public class
MainActivity extends
AppCompatActivity {
@RequiresApi(api = Build.VERSION_CODES.N)
@Override
protected void
onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(new
GameSurface(this));
}
}