我想在屏幕上以2 x 2网格格式显示4张图像。图像来自谷歌图像搜索,图像是200×200的正方形
这是我扩展它们的方法。 RelativeLayout有4个嵌套的RelativeLayout,每个布局都有imageView。这就是我获得屏幕宽度来缩放图像的方法。将内部layoutparams的高度和宽度设置为screenWidth / 2,然后缩放图像。
这是我正在做的,以获得特定屏幕的图像高度和宽度。例如,如果屏幕宽度为550,那么我的图像尺寸将为275 x 275.
public static int getOptionWidth(Context context) {
DisplayMetrics metrics = context.getResources().getDisplayMetrics();
return metrics.widthPixels;
}
optionWidth = (getOptionWidth(context) / 2)
这是针对未缩放的位图
public static Bitmap resourceDecoder(byte[] imgBytes, int destWidth, int destHeight) {
Options options = new Options();
options.inJustDecodeBounds = true;
BitmapFactory.decodeByteArray(imgBytes, 0, imgBytes.length, options);
options.inJustDecodeBounds = false;
float srcAspect = (float) srcWidth / (float) srcHeight;
float dstAspect = (float) dstWidth / (float) dstHeight;
if (srcAspect > dstAspect) {
options.inSampleSize = srcHeight / dstHeight;
} else {
options.inSampleSize = srcWidth / dstWidth;
}
Bitmap unscaledBitmap = BitmapFactory.decodeByteArray(imgBytes, 0, imgBytes.length, options);
return unscaledBitmap;
}
这将是我的目的地宽度和高度,因为我需要正方形的图像。我已经实现了获取源矩形(getSrcRect)和获取目标矩形(getDstRect)的基本方法
Rect srcRect = getSrcRect(unscaledBitmap.getWidth(), unscaledBitmap.getHeight(), dstWidth, dstHeight);
Rect dstRect = getDstRect(unscaledBitmap.getWidth(), unscaledBitmap.getHeight(), dstWidth, dstHeight);
Bitmap scaledBitmap = Bitmap.createBitmap(dstRect.width(), dstRect.height(), Config.ARGB_8888);
Canvas canvas = new Canvas(scaledBitmap);
canvas.drawBitmap(unscaledBitmap, srcRect, dstRect, new Paint(Paint.FILTER_BITMAP_FLAG));
return scaledBitmap;
这个工作正常,结果正如预期的那样(在hdpi,xhdpi和mdpi上测试)。但现在我很困惑,因为我不使用dxtopx或pxTodX转换。我错过了什么吗?虽然结果如预期,但我对此方法并不担心。我不知道我应该使用pxToDx,反之亦然。如果我这样做会如何影响我的结果,我应该如何使用它们。
答案 0 :(得分:0)
您不必为此使用PX到DP转换,因为您已使用getOptionWidth(context)设置了相对于屏幕宽度的所有大小变量。