使用 Glide 预加载多个图像 [英] Preload multiple images with Glide
问题描述
我们正在尝试将图像预加载到缓存中以便稍后加载(图像位于应用程序的资产文件夹中)
We are trying to preload images into cache memory to load them later (the images are located in the Asset folder of the application)
我们尝试了什么:
Glide.with(this)
.load(pictureUri)
.diskCacheStrategy(DiskCacheStrategy.ALL);
Glide.with(this)
.load(picture_uri)
.diskCacheStrategy(DiskCacheStrategy.ALL)
.preload();
问题:只有在我们尝试加载/显示图像时才会缓存图像:它们必须先加载到内存中才能更快显示.
The issue: Images are cached only when we are trying to load/display them: They have to be loaded in memory before so that they appear faster.
Glide.with(this)
.load(picture_uri)
.into(imageView);
我们还尝试使用 GlideModule 来增加 CacheMemory 的大小:
We also tried to use a GlideModule to increase the CacheMemory size:
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"/>
到目前为止没有任何效果.有什么想法吗?
Nothing is working so far. Any idea?
我们尝试使用一个不可见的 1 dp imageView,但结果是一样的:
We trying to use an invisible 1 dp imageView, but the result is the same:
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);
}
}
推荐答案
最好的选择是自己处理缓存,它给你更多的控制 &应该很容易,因为您已经知道要加载哪些位图.
The best option is to handle caching yourself, it gives you more control & should be easy as you already know what bitmaps are to be loaded.
LruCache<String, Bitmap> memCache = new LruCache<>(size) {
@Override
protected int sizeOf(String key, Bitmap image) {
return image.getByteCount()/1024;
}
};
第二:将位图加载到 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);
}
});
第三:使用缓存的位图
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);
}
这篇关于使用 Glide 预加载多个图像的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!