ユニバーサルイメージローダーライブラリ(1.8.3バージョン)をアプリに正常に適用しました。グリッドビューアイテムに表示する前に画像のサイズを変更しようとしています(画像が大きすぎてメモリにキャッシュできない場合があるため)。
これが私が試していることです:
...
BitmapFactory.Options resizeOptions = new BitmapFactory.Options();
resizeOptions.inSampleSize = 3; // decrease size 3 times
resizeOptions.inScaled = true;
options = new DisplayImageOptions.Builder()
.showStubImage(R.drawable.blank)
.showImageForEmptyUri(R.drawable.no_image)
.cacheInMemory()
.cacheOnDisc()
.decodingOptions(resizeOptions)
.build();
...
このコードは、何らかの理由で画像を3分の1に小さくしません。
誰かが正確に指定された密度で画像のサイズを変更するより良い方法がありますか?
Javaドキュメントを注意深く読む:
着信オプションの_
Options.inSampleSize
_は考慮されません。ライブラリは、imageScaleType(...)
オプションに従って、最適なサンプルサイズ自体を計算します。
また、画像のターゲットサイズを定義するImageSizeUtil.defineTargetSizeForView(ImageView imageView, int maxImageWidth, int maxImageHeight)
も調べてください。
サイズは、ターゲットビューのパラメーター、構成パラメーター、またはデバイスの表示サイズによって定義されます。サイズ計算アルゴリズム:
- ビューの実際に描画された
getWidth()
およびgetHeight()
を取得します。ビューがまだ描画されていない場合は、手順2に進みます。- _
layout_width
_および_layout_height
_を取得します。両方の値が正確でない場合は、手順3に進みます。maxWidth
とmaxHeight
を取得します。両方が設定されていない場合は、手順4に進みます。maxImageWidth
param(maxImageWidthForMemoryCache)およびmaxImageHeight
param(maxImageHeightForMemoryCache)を取得します。両方が設定されていない(0に等しい)場合は、手順5に進みます。- デバイスの画面サイズを取得します。
UILは、imageScaleType
とtargetSize
(およびImageView
のscaleType)に従って結果のビットマップサイズを定義します。
これを試してみてください:
options = new DisplayImageOptions.Builder()
.showStubImage(R.drawable.blank)
.showImageForEmptyUri(R.drawable.no_image)
.cacheInMemory()
.cacheOnDisc()
.decodingOptions(resizeOptions)
.postProcessor(new BitmapProcessor() {
@Override
public Bitmap process(Bitmap bmp) {
return Bitmap.createScaledBitmap(bmp, 300, 300, false);
}
})
.build();
イメージビューの高さをxmlで設定できます。あなたの画像は、言及された高さと幅に正確にフィットします。ダウンロードした画像は、xmlに記載されている高さと幅に収まります。
また、あなたと同様の問題を見ることができます。
https://github.com/nostra13/Android-Universal-Image-Loader/issues/18