web-dev-qa-db-ja.com

Glideで複数の画像をプリロードする

画像のプリロードを後でキャッシュメモリにロードしようとしています(画像はアプリケーションのアセットフォルダにあります)

私たちが試したもの:

Glide.with(this)
    .load(pictureUri)
    .diskCacheStrategy(DiskCacheStrategy.ALL);

Glide.with(this)
    .load(picture_uri)
    .diskCacheStrategy(DiskCacheStrategy.ALL)
    .preload();

問題:画像は、それらをロード/表示しようとするときにのみキャッシュされます:より速く見えるように、それらは前もってメモリにロードされなければなりません。

Glide.with(this)
    .load(picture_uri)
    .into(imageView);

また、GlideModuleを使用してCacheMemoryサイズを増やすことも試みました。

public class GlideModule implements com.bumptech.glide.module.GlideModule {
    @Override
    public void applyOptions(Context context, GlideBuilder
        builder.setMemoryCache(new LruResourceCache(100000));
    }

    @Override
    public void registerComponents(Context context, Glide glide) {
    }
}

マニフェストで:

 <meta-data Android:name=".GlideModule" Android:value="GlideModule"/>

今のところ何も機能していません。何か案が?


非表示の1 dp imageViewを使用しようとしましたが、結果は同じです。

for(Drawing drawing: getDrawingsForTab(tab)){

    Glide.with(this)
            .load(drawing.getImage().toUri())
            .dontAnimate()
            .diskCacheStrategy(DiskCacheStrategy.ALL)
            .into(mPreloadCacheIv);

    for(Picture picture : getPictures()){

        Glide.with(this)
                .load(picture.getPicture().toUri())
                .dontAnimate()
                .diskCacheStrategy(DiskCacheStrategy.ALL)
                .into(mPreloadCacheIv);
    }
}
28
An-droid

最適なオプションは、キャッシュを自分で処理することです。これにより、より多くの制御が可能になり、ロードするビットマップをすでに知っているため、簡単になります。

最初:LruCacheのセットアップ

LruCache<String, Bitmap> memCache = new LruCache<>(size) {
    @Override
    protected int sizeOf(String key, Bitmap image) {
        return image.getByteCount()/1024;
    }
};

2番目:ビットマップをLruCacheにロードする

Display display = getWindowManager().getDefaultDisplay();
Point size = new Point();
display.getSize(size);
int width = size.x; //width of screen in pixels
int height = size.y;//height of screen in pixels
Glide.with(context)
    .load(Uri.parse("file:///Android_asset/imagefile"))
    .asBitmap()
    .fitCenter() //fits given dimensions maintaining ratio
    .into(new SimpleTarget(width,height) {
        // the constructor SimpleTarget() without (width, height) can also be used.
        // as suggested by, An-droid in the comments
        @Override
        public void onResourceReady(Bitmap resource, GlideAnimation glideAnimation) {
            memCache.put("imagefile", resource);
        }
    });

3番目:キャッシュされたビットマップを使用する

Bitmap image = memCache.get("imagefile");
if (image != null) {
    //Bitmap exists in cache.
    imageView.setImageBitmap(image); 
} else {
    //Bitmap not found in cache reload it 
    Glide.with(context)
         .load(Uri.parse("file:///Android_asset/imagefile"))
         .into(imageView);
}
18
Sakchham

次のコードを使用して、画像を表示せずにキャッシュします

  1. webから画像をダウンロードしてdiskCacheに保存する場合は、downloadOnlyメソッドを使用します。

    FutureTarget<File> future = Glide.with(applicationContext)
        .load(yourUrl)
        .downloadOnly(500, 500);
    
  2. メモリキャッシュにロードする場合は、preloadメソッドを使用します。

    Glide.with(context)
            .load(url)
            .preload(500, 500);
    

後でキャッシュされた画像を使用できます

Glide.with(yourFragment)
    .load(yourUrl)
    .into(yourView);

21
Vinay Wadhwa

Glideバージョン4.6.1

RequestOptions requestOptions = RequestOptions
        .diskCacheStrategy(DiskCacheStrategy.ALL);

Glide.with(appContext)
        .asBitmap()
        .load(model)
        .apply(requestOptions)
        .submit();
10
yoAlex5