我想在屏幕上显示2 x 2网格格式的4个图像。图片来自google图片搜索,图片是200X200的正方形
这是我用来扩展它们的方法。带有4个嵌套RelativeLayout的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还是反之亦然。如果我这样做了,它对我的结果有什么影响,我应该如何使用它们。
发布于 2013-04-02 20:07:57
您不必为此使用PX到DP转换,因为您已经使用getOptionWidth(上下文)设置了所有与屏幕宽度相关的大小变量。
https://stackoverflow.com/questions/15761427
复制相似问题