初学Android Studio
来源:互联网 发布:表达知错的句子 编辑:程序博客网 时间:2024/06/03 17:29
使用Android Studio制作一个全民飞机大战的登录界面。
采用画的方式;
第一步先创建一个GameSurface()类;然后继承SurfaceView类,implements SurfaceHolder.Callback方法,并且实现其中的没有完成的方法surfaceChanged、surfaceDestroyed、surfaceCreated、GameSurface;
第二步创建SurfaceHolder 的对象surfaceHolder,再创建画布类Canvas的对象canvas和画笔类Paint对象paint并用private修饰;
第三步在GameSurface类中初始化surfaceHolder;再添加回调函数surfaceHolder = this.getHolder(),再初始化画笔和抗锯齿paint.setAntiAlias();参数为true;
第四步在surfaceCreated方法中添加一个线程,在run()方法中写一个myDraw()方法。在myDraw()方法中先将画布加锁surfaceHolder.lockCanvas();再判断画布是否为空如果不是则将画布显示在模拟器上;
第五步把需要的图片拷贝至res中的deawable中;再在GameSurface()中创建bmpMenuBG,Logo:bmplogo,按钮:bmpButton,文本:bmptext。再用private修饰,基于Bitmap类创建;接着我们在GameSurface()中创建一个方法initBitmap()导入需要的图片bmpMenuBG=BitmapFactory.decodeResource(this.getResources(), R.drawable.XXXXXXXX);
六步我创建一个GameMenu()类,将需的页面背景图片对象:bmpMenuBG,Logo:bmplogo,按钮:bmpButton,文本:bmptext。再用private修饰,基于Bitmap类创建;再创建构造方法GameMenu(),封装我们创建的四个象;再创建一个普通的方法myDraw(),其中传入画布Canvas的对象canvas和画笔Paint的对象paint就可以开始”画”了。
画:
第一步先将画将画布背景换成需要的背景图案
用canvas调用drawBitmap方法其中需要四个参数第一个是我们第一的背景图片bmpMenuBG,第二个数字和第三个数字是图片的位置,由于是背景图片我们就填两个0,第四个是画笔对象paint。
接着我们要把飞机大战游戏Logo画上去,但是现在我们不是背景图了,所以我们要创建一个Rect()矩形方法对象r,将Logo填在这个矩形中,再将矩形放在画布上的准确位置。初始化Rect()中也要填写四个参数分别是矩形左边距离屏幕左边的距离、上边距离屏幕上边的距离、右边距离屏幕右边的距离、下边距离屏幕下边的距离。这时这四个参数需要我们好好斟酌。
用int定义一个width=canvas.getWidth()来获取模拟器宽,height=canvas.getHeight()获取模拟器高;
(50,(int)(height*0.05),width-50,(int)(height*0.3+height*0.15)比较合适(根据手机不通参数不同),再用canvas调用drawBitmap
在第一个改为bmplogo对象,第二个参数时填写null,第三个改为r,第四个依旧是paint。
接着我们画按钮先定义一个gao,kuan;再经过调试gao= (int) (height*0.75);和kuan=width/2-bmpButton.getWidth()/2;;最后用canvas调用drawBitmap在第一个改对象bmpButton,第二个参数时填写kuan,第三个改为gao,第四个依旧是paint。最后我们在按钮上再加一个印有汉字:开始游戏1的图片再次定义gao和kuan,调试后为gao= (int) (height*0.75)+20;kuan=width/2-bmpButton.getWidth()/2+40;最后用canvas调用drawBitmap
在第一个改为bmptext对象,第二个参数时填写gao,第三个改为kuan,第四
旧是paint;
代码如下:
package com.example.z.myapplication;import android.content.Context;import android.graphics.Bitmap;import android.graphics.BitmapFactory;import android.graphics.Canvas;import android.graphics.Paint;import android.view.SurfaceHolder;import android.view.SurfaceView;/** * Created by fly on 2017/5/24. */public class GameSurfaceView extends SurfaceView implements SurfaceHolder.Callback { private Canvas canvas; private Paint paint; private SurfaceHolder surfaceHolder; public static int screenWidth;//手机屏幕的宽 public static int screenHeight;//手机屏幕的高 //Menu相关 private GameMenu gameMenu; private Bitmap bmpMenuBG;//菜单页面背景图片 private Bitmap bmpMenuLogo;//菜单页面Logo private Bitmap bmpMenuButton;//菜单页面按钮 private Bitmap bmpbtBG;//菜单页面按钮背景 public GameSurfaceView(Context context) { super(context); surfaceHolder = this.getHolder();//初始化holder对象 surfaceHolder.addCallback(this); paint=new Paint(); paint.setAntiAlias(true); } @Override public void surfaceCreated(SurfaceHolder holder) { screenWidth=this.getWidth(); screenHeight=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对象画游戏菜单页面 gameMenu.draw(canvas,paint); if(canvas!=null){ surfaceHolder.unlockCanvasAndPost(canvas); } } /** * 初始化图片方法 */ private void initBitmap() { //把图片转化成Bitmap bmpMenuBG = BitmapFactory.decodeResource(this.getResources(), R.drawable.mainmenu); bmpMenuLogo = BitmapFactory.decodeResource(this.getResources(), R.drawable.logo); bmpMenuButton = BitmapFactory.decodeResource(this.getResources(), R.drawable.starttext); bmpbtBG = BitmapFactory.decodeResource(this.getResources(), R.drawable.menustart); //初始化对象 gameMenu = new GameMenu(bmpMenuBG, bmpMenuLogo, bmpbtBG, bmpMenuButton); }}
GameMenu类:
package com.example.z.myapplication;import android.graphics.Bitmap;import android.graphics.Canvas;import android.graphics.Paint;import android.graphics.Rect;/** * Created by fly on 2017/5/24. */public class GameMenu { private Bitmap bmpMenuBG;//菜单页面背景图片 private Bitmap bmpMenuLogo;//菜单页面Logo private Bitmap bmpMenuButton;//菜单页面按钮 private Bitmap bmpbtBG;//菜单页面按钮背景 private Rect rect; public GameMenu(Bitmap bmpMenuBG, Bitmap bmpMenuLogo, Bitmap bmpMenuButton, Bitmap bmpbtBG) { this.bmpMenuBG = bmpMenuBG; this.bmpMenuLogo = bmpMenuLogo; this.bmpMenuButton = bmpMenuButton; this.bmpbtBG = bmpbtBG; rect=new Rect (0, GameSurfaceView.screenHeight/3, GameSurfaceView.screenWidth, GameSurfaceView.screenHeight/3+ GameSurfaceView.screenHeight/5); }//GameSurfaceview.screenHeight是调用这个高度;GameSurfaceview.screenWidth是调用这个宽度,四个变量,分别是左上角x,y坐标和右下角x,y坐标 public void draw(Canvas canvas, Paint paint) { canvas.drawBitmap(bmpMenuBG, 0, 0, paint); canvas.drawBitmap(bmpMenuLogo, null, rect, paint); int x= GameSurfaceView.screenWidth/2-bmpMenuButton.getWidth()/2; int y= GameSurfaceView.screenHeight/3*2; canvas.drawBitmap(bmpMenuButton, x, y, paint); int m= GameSurfaceView.screenWidth/2-bmpbtBG.getWidth()/2; int n= GameSurfaceView.screenHeight/3*2; canvas.drawBitmap(bmpbtBG, m, n, paint); }}
- android studio 初学
- 初学Android Studio
- Android Studio初学习体会
- Android Studio初学习体会
- Android Studio初学(一)
- 初学android Lambda(Android studio 配置)
- 初学Android,studio需要用的快捷
- android studio初学之一些快捷键
- 初学使用android studio的NDK
- 初学android studio 快捷键个人实践总结
- Android初学之------Android Studio 运行java程序
- Android Studio下NDN-JNI技术初学
- Android Studio初学(一)----加快运行速度
- Android初学
- 初学Android
- 初学android
- 初学Android
- Android 初学
- java基础--while循环实现存钱问题案例
- Python学习、机器学习(图像处理)、网络渗透、考研杂记
- HDU6025 Coprime Sequence【前缀GCD+后缀GCD】
- 循环日程表问题
- JAVASE_程序的类型及构成
- 初学Android Studio
- 鼠标拖动文字
- Python爬取网页时的#号是为了区分什么
- AJAX内容
- ConstraintLayout(约束布局)
- Biomechanical Design of the Berkeley Lower
- Sensing Pressure Distribution on a Lower-Limb Exoskeleton
- Android中Fragment的使用
- C# 面向过程 猜拳游戏