android 游戏 不同分辨率 屏幕适配的方法
来源:互联网 发布:以太网的mac地址长度为 编辑:程序博客网 时间:2024/05/17 09:18
有关android屏幕适配问题
中心思想
™这个的话,没有屏幕适配的就是所有的坐标都是固定的呗,那适配以后的就是所有坐标都按屏幕的大小乘一定比例以后得到的相对坐标。
就比如有以下几张图:
打算做成下面这种效果
流程如下:
private Canvas canvas;private Bitmap backgroundBitmap;// 画布的宽和高private float canvasWidth;private float canvasHeight;//背景图片的宽和高private int backWidth;private int backHeight;//背景图片的矩形private Rect backRect;//画布的矩形private RectF canvasRect;
画布的宽和高是为了得到整个画布所在的矩形框,即屏幕的矩形框
后面所有图形化的位置都是根据相对于画布的相对位置得到的
™音乐和暂停图片和位置的声明:
//表示音乐状态的图片private Bitmap musicOnBitmap;//音乐图片的宽和高private int musicBitmapWidth;private int musicBitmapHeight;//音乐图片矩形private Rect musicRect;//音乐图片在画布上的位置private RectF musicOnCanvas;//暂停图片private Bitmap gamePauseBitmap;//重新开始图片private Bitmap gameRestartBitmap;//暂停图片的宽和高private int pauseImageWidth;private int pauseImageHeight;//暂停图片矩形private Rect pauseRect;//暂停图片在画布上的位置private RectF pauseOnCanvas;接下来就是各个变量的初始化啦!
™如果你用的是surfaceview呢,就在函数surfaceCreated里面初始化画布的宽和高:
//获得画布宽和高canvasWidth = this.getWidth();canvasHeight = this.getHeight();//初始化画布矩形canvasRect = new RectF(0, 0, canvasWidth, canvasHeight); //初始化音乐图片在画布上的位置 musicOnCanvas = new RectF(canvasWidth*395/480,canvasHeight*25/800, canvasWidth*450/480,canvasHeight*75/800); //初始化暂停图片在画布上的位置 pauseOnCanvas = new RectF(canvasWidth*320/480,canvasHeight*100/800, canvasWidth*435/480,canvasHeight*150/800);请注意以上代码中 图片在画布上的位置的两行:
要知道准确画出图片,首先要计算图片在画布上的位置,
™比如音乐那个小喇叭吧,在屏幕的右上角处,如果屏幕的大小是480,800的。那么小喇叭的左上角坐标是(395,25)右下角(450,75),但是我们不能用固定屏幕的嘛,所以就根据画布的宽和高得到相对屏幕的坐标左上角(canvasWidth*395/480,canvasHeight*25/800),右下角(canvasWidth*450/480,canvasHeight*75/800)
™那么小图片在屏幕上的矩形位置就如上面所示啦(当然,那些比例是可以化简的)
™
™注意哦,因为surfaceCreat函数的执行顺序是比类的构造函数晚的,所以不可以在构造函数里初始化需要用画布宽和高来计算的变量。
™如果用的是view,
™在构造函数里用以下函数就可以得到屏幕宽和高
//得到屏幕的高和宽 WindowManager manage = getWindowManager(); Display display = manage.getDefaultDisplay(); int screenHeight = display.getHeight();int screenWidth = display.getWidth();
//初始化背景图backgroundBitmap = BitmapFactory.decodeResource(getResources(), R.drawable.background);//初始化背景的宽和高backWidth = backgroundBitmap.getWidth();backHeight = backgroundBitmap.getHeight();//初始化背景矩形backRect = new Rect(0, 0, backWidth, backHeight);//初始化音乐图片musicOnBitmap = BitmapFactory.decodeResource(getResources(),R.drawable.music_on);musicOffBitmap = BitmapFactory.decodeResource(getResources(), R.drawable.music_off);//初始化音乐图片宽和高musicBitmapWidth = musicOnBitmap.getWidth();musicBitmapHeight = musicOnBitmap.getHeight();//初始化音乐图片矩形musicRect = new Rect(0,0,musicBitmapWidth,musicBitmapHeight);//初始化暂停图片gamePauseBitmap = BitmapFactory.decodeResource(getResources(), R.drawable.game_pause);//初始化暂停图片的宽和高pauseImageWidth = gamePauseBitmap.getWidth();pauseImageHeight = gamePauseBitmap.getHeight();//初始化暂停图片矩形pauseRect = new Rect(0,0,pauseImageWidth,pauseImageHeight);
特别注意像以上那样,我们需要图片的宽和高还有所在的矩形都要初始化,因为会在接下来的绘图函数中遇到,这么得到的变量都是适应任何屏幕的。
这些准备工作做好以后,接下来就可以直接绘图就好了。
™这是在画游戏背景:
canvas.drawBitmap(backgroundBitmap, backRect, canvasRect, null);
第一个参数使我们初始化的位图资源
第二个参数是图片的矩形,即图片左上角和右下角相对于图片自身的坐标,由于是背景图,所以整个图片都画上去
第三个图就是图片在画布上的位置,这个是背景图么所以是填满画布的,直接用画布所在的矩形就好了
™下面是画音乐和暂停的小图片:
canvas.drawBitmap(musicOnBitmap, musicRect, musicOnCanvas, null);canvas.drawBitmap(gamePauseBitmap, pauseRect, pauseOnCanvas, null);
音乐和暂停的矩形,里面的坐标,都在初始化函数中计算出来了,这里直接用就好了
这么画出来的图片就是适配屏幕的啦
- android 游戏 不同分辨率 屏幕适配的方法
- android 游戏 不同分辨率 屏幕适配的方法
- Android 适配不同分辨率屏幕
- 适配不同分辨率屏幕
- Android适配不同分辨率——精确适配不同的dpi和屏幕尺寸
- Android适配不同分辨率——精确适配不同的dpi和屏幕尺寸
- Android:支持不同分辨率的屏幕设计
- Android自适应不同分辨率的屏幕
- 适配不同分辨率的Android手机的处理方法
- Android开发中屏幕不同分辨率适配
- android网络图片适配不同分辨率屏幕
- android不同分辨率屏幕横向固定适配
- android屏幕的多分辨率适配
- Android常见分辨率的屏幕适配
- Android 自适应不同分辨率屏幕
- android 不同分辨率,屏幕适应
- 文字适配不同分辨率屏幕
- 【分辨率】Android官方提供的支持不同屏幕大小的全部方法
- C# 中String和 Stringbuilder的区别
- ISession接口【转】
- MapXtreme实用技巧与源码10例[转载]
- 这是我在csdn写的第一篇博客!
- android版本区别
- android 游戏 不同分辨率 屏幕适配的方法
- Linux(CentOS)目录操作命令、文件操作命令、压缩解压缩命令
- MapInfo开发心得——控件篇【转】
- link 一下 修改mysql 的六种方法
- php面试题及答案(转)
- Linux(CentOS)挂载移动硬盘,实现文件拷贝、备份
- 论QT的信号/槽机制
- HTML、XML中的转义字符
- 一个经典的win32程序