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);
我是 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);