Android图像拉伸(背景填充)
时间:2011年05月25日作者:ronald查看次数:2,677 views评论次数:0
最近在做一个小游戏的时候,碰到图片不能兼容多种分辨率的问题.今日碰到的问题主要是背景图.
以上的背景图的大小为 320X480,当前的手机分辨率为480X800,直接使用以下代码直接画图像的话就会有以上的问题.
public void drawBackground(canvas){ // 游戏背景 Bitmap playingBackground = BitmapFactory.decodeResource( context.getResources(), R.drawable.bg_playing_game); // 直接绘制背景,坐标为 0,0 canvas.drawBitmap(playingBackground, 0,0, CommonView.paint); }
后来从网上查找一些资料,了解到可以使用 android.graphics.Matrix 要将背景图进行缩放或拉伸的功能.当然 android.graphics.Matrix类能实现更多的图像处理,如翻转,透明度等等,如果需要了解 android.graphics.Matrix怎么使用,可以查找相关资料.
好了,下面是处理后的效果图:
以下是实现该效果的代码:
public void drawBackground(canvas){ // 游戏背景 Bitmap playingBackground = BitmapFactory.decodeResource( context.getResources(), R.drawable.bg_playing_game); //计算缩放率,新尺寸除原始尺寸 int w = CommonView.background.getWidth(); int h = CommonView.background.getHeight(); // 目标的宽度与高度根据displayMetrics 来得到手机屏幕的实际宽度与高度 DisplayMetrics metrics = new DisplayMetrics(); getWindowManager().getDefaultDisplay().getMetrics(metrics); int phoneWidth = metrics.widthPixels; int phoneHeigth = metrics.heigthPixels; float scaleWidth = ((float) phoneWidth / w); float scaleHeight = ((float) phoneHeigth / h); matrix = new Matrix(); matrix.postScale(scaleWidth, scaleHeight); // 绘制背景的时候不直接写坐标,而使用 matrix的参数 canvas.drawBitmap(playingBackground, matrix, new Paint()); }
通过以上的代码,就是实现图像的拉伸或背景填充.
最近开发的小游戏没有使用游戏引擎来实现.是想先好好了解Android游戏开发最原始的实现方式,之后再开发再来研究一些Android的游戏引擎.
个人觉得不使用游戏引擎,最难处理的是手机分辨率的问题.



最新评论
我在调出这个窗口的时候,暂停了我 »
Post:2011-11-29 19:31:02出8.0.5了,能否做一下破解呢? :mrgreen:
Post:2011-11-10 17:05:58:razz: 一直在找这个东西,甚至也 »
Post:2011-10-21 21:29:42Alarm 这个类是一个挺有意思的类, »
Post:2011-10-19 15:05:46回来看看等DbVisualizer 8.0 新版 »
Post:2011-10-10 19:20:21好东西,收藏了。
Post:2011-09-25 22:36:38:twisted: 不麻烦的话,能否能做 »
Post:2011-09-05 16:10:59你可以到hostloc去找IDC,很多。 X »
Post:2011-08-28 12:37:23