android 游戏 不同分辨率 屏幕适配的方法
来源:互联网 发布:linux文件系统目录结构 编辑:程序博客网 时间:2024/05/21 06:39
有关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);
音乐和暂停的矩形,里面的坐标,都在初始化函数中计算出来了,这里直接用就好了
这么画出来的图片就是适配屏幕的啦
- <img src="http://hi.csdn.net/attachment/201111/21/0_1321856379i941.gif" alt="" />
- android 游戏 不同分辨率 屏幕适配的方法
- android 游戏 不同分辨率 屏幕适配的方法
- Android 适配不同分辨率屏幕
- 适配不同分辨率屏幕
- Android适配不同分辨率——精确适配不同的dpi和屏幕尺寸
- Android适配不同分辨率——精确适配不同的dpi和屏幕尺寸
- Android:支持不同分辨率的屏幕设计
- Android自适应不同分辨率的屏幕
- 适配不同分辨率的Android手机的处理方法
- Android开发中屏幕不同分辨率适配
- android网络图片适配不同分辨率屏幕
- android不同分辨率屏幕横向固定适配
- android屏幕的多分辨率适配
- Android常见分辨率的屏幕适配
- Android 自适应不同分辨率屏幕
- android 不同分辨率,屏幕适应
- 文字适配不同分辨率屏幕
- 【分辨率】Android官方提供的支持不同屏幕大小的全部方法
- Android系统级开发--Kernel开发
- 基于Android平台的kernel module编程
- captive portal code view (java部分)I
- 这个博客是我前进的动力和展现我价值的地方
- captive portal code view (java部分)II
- android 游戏 不同分辨率 屏幕适配的方法
- MFC----封装类与窗口
- 建造者模式
- CE游戏修改器制作详解
- Nero11序列号 有效序列号
- 在2个排序数组内找到第K小的元素
- js ide WebStorm 使用总结
- Silverlight/Windows8/WPF/WP7/HTML5周学习导读(6月25日-7月1日)
- 判断一个数字是否是回文数