画面に 2 x 2 グリッド形式で 4 つの画像を表示したいと考えています。画像は Google 画像検索から提供され、画像は 200 X 200 の正方形です
これは、それらをスケーリングするための私のアプローチです。4 つのネストされた RelativeLayout を持つ RelativeLayout と、各レイアウトには imageView があります。これは、画像をスケーリングするために画面幅を取得する方法です。内部レイアウトパラメータの高さと幅を 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 を使用するべきか、その逆を使用すべきかわかりません。実行した場合、結果にどのように影響し、これらをどのように使用する必要がありますか。