カスタムクラスを書いています。実際に描画される前に、いくつかの前処理とサイズ設定のために計算する必要があるビットマップがあります。ビットマップ自体は、前処理された 9 パッチ イメージです。コンストラクターには、次のコードがあります。
BitmapFactory.Options bmpOptions = new BitmapFactory.Options();
bmpOptions.inJustDecodeBounds = true;
BitmapFactory.decodeResource(getResources(), BITMAP_ID, bmpOptions);
Bitmap bmp = BitmapFactory.decodeResource(getResources(), BITMAP_ID);
Log.d(getClass().getSimpleName(), "width: " + bmp.getWidth() + " " + bmpOptions.outWidth + "; height: " + bmp.getHeight() + " " + bmpOptions.outHeight);
Android 3.2.2 を実行している 7 インチ Samsung Galaxy Tab 7 での出力:
幅: 556 556; 高さ: 890 890
Android 4.1 を実行している 10 インチ Motorola Xoom での出力:
幅: 556 556; 高さ: 890 890
Android 4.2.2 を実行している 7 インチの Nexus 7 での出力:
幅: 740 834; 身長; 1185 1335
ビットマップの実際のサイズは次のとおりです。
mdpi: 558×892
hdpi:836×1337
ビットマップは前処理された 9 パッチであるため、サイズが 2 ピクセルずれています。Nexus 7 の hdpi アセットがこれほど大きな違いを生む理由がわかりません。
これらの構成も試しました:
bmpOptions.inScaled = false;
と
bmpOptions.inTargetDensity = getResources().getDisplayMetrics().densityDpi;
と
bmpOptions.inTargetDensity = getResources().getDisplayMetrics().densityDpi;
bmpOptions.inDensity = getResources().getDisplayMetrics().densityDpi;
と
bmpOptions.inTargetDensity = 0;
bmpOptions.inDensity = 0;
また、逆のアプローチを試し、デコードされたビットマップ用に 2 番目の BitmapFactory.Options を作成し、まったくスケーリングしないように指示しました。
これらはすべて同じ正確な結果を提供します。