6

リモート URL からダウンロードしたいくつかのカバーを表示するために使用NetworkImageView していますが、それらをキャッシュして表示することに成功しましたが、ユーザーが必要に応じて独自のカバー画像を設定できるようにしたいと考えています。setImageUrlメソッドを引数として使用しようとしましUri.fromFile(mCoverFile).toString()たが、機能しません。リモート イメージとローカル イメージが混在しているため、通常ImageViewの s に切り替えることができないため、ローカル イメージの読み込みを有効にする方法はないかと考えていました。

ImageViewsetImageBitmap方法はもちろん承知しておりNetworkImageViewますが、作成したものを自動的にリサイズし、 s やs でのリサイクルBitmapも防いでいます。ViewGridViewListView

更新: njzk2の答えはうまくいきました。サイズに応じてビットマップのサイズを自動変更するには、Volley のソースからメソッドをViewコピーするだけです。ImageRequest.doParse

4

3 に答える 3

7

NetworkImageViewを使用しImageLoader、次に を使用しImageCacheます。

ImageCacheキーに同じメカニズムを使用する場合は、イメージにカスタムを提供できます。

 return new StringBuilder(url.length() + 12).append("#W").append(maxWidth)
            .append("#H").append(maxHeight).append(url).toString();

url実際のリクエストが実行される前にテストされていないため、ここでは問題ありません。

通常、「キャッシュ」は次のようになります。

public class MyCache implements ImageLoader.ImageCache {

    @Override
    public Bitmap getBitmap(String key) {
        if (key.contains("file://")) {
            return BitmapFactory.decodeFile(key.substring(key.indexOf("file://") + 7));
        } else {
            // Here you can add an actual cache
            return null;
        }
    }
    @Override
    public void putBitmap(String key, Bitmap bitmap) {
        // Here you can add an actual cache
    }
}

次のように使用します。

imageView.setImageUrl(Uri.fromFile(mCoverFile).toString(), new MyCache());

(これは実際にテストされていないため、調整が必要になる場合があります)

于 2014-03-17T20:59:24.693 に答える