Android 图片不能自动缩放或反映选项设置

Android image not auto-scaling or reflecting options settings

我是 android 的新手,我一直无法在 S.O 中找到可行的解决方案。

我有一个游戏的背景,我已经根据适当的密度调整了图像的大小,并将它们放在我的资源可绘制密度目录中,但我的图像仍然在模拟器中。

我也试过设置 BitmapFactory 选项,但仍然没有反应:

BitmapFactory.Options options = new BitmapFactory.Options();
Display display = ((Activity)context).getWindowManager().getDefaultDisplay();
Point size = new Point();
display.getSize(size);
options.outHeight = size.x;
options.outWidth = size.y;

marioBackground = BitmapFactory.decodeResource(getResources(),
                                               R.drawable.mario_bros_three,
                                               options );

然后绘制位图:

canvas.drawBitmap(marioBackground, 0, 0, null);

但我仍然在我的 mdpi 模拟器中看到这个:

有人可以为我指出正确的方向,以便我的图像符合我的设置选项或自动缩放。

好的,我能够解决这个问题,但最终的解决方案与我预期的完全不同。

首先,我必须删除试图使用 BitmapFactory.Options 拉伸实际背景图像以匹配 window 大小的逻辑。所以我删除了以下内容:

BitmapFactory.Options options = new BitmapFactory.Options();
Display display = ((Activity)context).getWindowManager().getDefaultDisplay();
Point size = new Point();
display.getSize(size);
options.outHeight = size.x;
options.outWidth = size.y;

marioBackground = BitmapFactory.decodeResource(getResources(),
                                               R.drawable.mario_bros_three,
                                               options );

其次,我必须使用以下方法确定宽度和高度的比例因子(我将此逻辑放在我的绘制方法中):

final float scaleFactorX = (float) getWidth() / marioBackground.getWidth();
final float scaleFactorY = (float) getHeight() / marioBackground.getHeight();

然后在我的绘图方法中,我必须使用 canvas' 缩放方法和新确定的比例因子缩放实际 canvas:

canvas.scale(scaleFactorX, scaleFactorY);

我在实际将位图绘制到 canvas:

之前这样做了
canvas.drawBitmap(marioBackground, 0, 0, null);

所以我的绘图方法包含以下逻辑,以便正确缩放我的背景图像:

final float scaleFactorX = (float) getWidth() / marioBackground.getWidth();
final float scaleFactorY = (float) getHeight() / marioBackground.getHeight();

canvas.scale(scaleFactorX, scaleFactorY);

canvas.drawBitmap(marioBackground, 0, 0, null);