日志标签:android游戏

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的游戏引擎.
个人觉得不使用游戏引擎,最难处理的是手机分辨率的问题.