我有一个尺寸为 854 x 480(我的测试手机的确切屏幕分辨率)的背景资源。当我将此资源加载到我的应用程序中时,它会按比例缩放。我在这里搜索并尝试了一些建议,但由于某些疯狂的原因,它无法缩放到合适的大小。
由于资源与屏幕大小相同,我不确定它为什么会增加背景资源的大小。它将它缩放到 1281 x 720,我不知道为什么。
发生转换的代码是:
public Sprite newSpriteLargeResource(Resources res, SpriteFormat format,
int resId, int reqWidth, int reqHeight) {
Options options = new Options();
options.inJustDecodeBounds = true;
Bitmap bitmap = null;
options.inSampleSize = calculateSample(options, reqWidth, reqHeight);
options.inJustDecodeBounds = false;
bitmap = BitmapFactory.decodeResource(res, resId, options);
Matrix m = new Matrix();
RectF inRect = new RectF(0, 0, bitmap.getWidth(), bitmap.getHeight());
RectF outRect = new RectF(0, 0, reqWidth, reqHeight);
boolean scaled;
scaled = m.setRectToRect(inRect, outRect, Matrix.ScaleToFit.CENTER);
if (scaled) {
float[] bmpValues = new float[9];
m.getValues(bmpValues);
Bitmap.createScaledBitmap(bitmap,
(int) ((bitmap.getWidth() * bmpValues[0])),
(int) ((bitmap.getHeight() * bmpValues[4])), true);
}else{
Bitmap.createScaledBitmap(bitmap, reqWidth, reqHeight, true);
}
return new AndroidSprite(bitmap, format);
}
private int calculateSample(Options options, int reqWidth, int reqHeight) {
final int height = options.outHeight;
final int width = options.outWidth;
int inSampleSize = 1;
if (height > reqHeight || width > reqWidth) {
final int heightRatio = Math.round((float) height
/ (float) reqHeight);
final int widthRatio = Math.round((float) width / (float) reqWidth);
inSampleSize = heightRatio < widthRatio ? heightRatio : widthRatio;
}
return inSampleSize;
}
您可能会注意到缩放的多个版本。我保留这样的代码的唯一原因是表明我已经尝试了多个版本的缩放,但它们都没有像我希望的那样工作。我知道问题出在这两种方法的某个地方,因为我有另一种非背景资源的方法,它们工作正常。我使用这个的唯一原因是为了更大的图像文件以避免出现内存不足异常。