私はAndroid-Universal-Image-Loaderライブラリを使用してリモート画像をロード/キャッシュしており、ImageLoadingListenerの元の画像サイズ(幅と高さ)を取得する方法を見つけるためにかなり長い間ソースを掘り下げてきました。
以下のサンプル コードは、私が何をしようとしているのかを示すものです。
protected class ViaImageLoadingListener implements ImageLoadingListener {
final SelectableImageView selectableImageView ;
protected ViaImageLoadingListener(SelectableImageView selectableImageView) {
this.selectableImageView = selectableImageView;
}
@Override
public void onLoadingComplete(String imageUri, View view, Bitmap loadedImage) {
selectableImageView.setImageBitmap(loadedImage);
// loadedImage.getWeight() will not return the original
// dimensions of the image if it has been scaled down
selectableImageView.setOriginalImageSize(width, height);
selectableImageView.invalidate();
}
ImageDecoder クラスと ImageLoader クラスを拡張して#prepareDecodingOptions
、カスタム ImageLoadingListener にデコーダー (メソッドで元の画像サイズを取得できる) をリンクするための回り道を見つけようとしました。しかし、構成オブジェクトはプライベートであり、フィールド (デコーダーを含む) はサブクラスからアクセスできません (とにかく、問題を解決するための過度にハックな方法のように感じます)。
UIL のスケーリング/メモリ管理の利点を失うことなく、元の画像サイズを取得する単純な「組み込み」方法を見落としていませんか?