Android Glide:如何下载和缓存位图?
我正在使用Glide在Android上下载和缓存图像。除了我不想将位图直接加载到ImageView
这一事实之外,一切运作良好,我不想拥有淡入淡出的动画,也没有图像占位符。Android Glide:如何下载和缓存位图?
我想要的是创建一个全局方法,它将帮助我在整个应用程序中下载图像。
public class MyApp extends Application {
public static void downloadImage(String url, final OnImageLoadedCallback callback) {
// And how to implement the listener ?
RequestListener<String, Bitmap> requestListener = new RequestListener<String, Bitmap() {
@Override
public boolean onException(Exception exc, String string, Target<Bitmap> target, boolean isFirstResource) {
callback.onDone(null);
return false;
}
@Override
public boolean onResourceReady(Bitmap bitmap, String string, Target<Bitmap> target, boolean isFromMemoryCache, boolean isFirstResource) {
callback.onDone(bitmap);
return false;
}
};
Glide.with(context)
.load(url)
.asBitmap()
.dontAnimate()
.diskCacheStrategy(DiskCacheStrategy.SOURCE)
.listener(requestListener);
}
}
问题是我不知道如何实现监听器。 RequestListener
根本没有被调用。
直到拨打电话into才开始载入Glide。 RequestListener接口观察请求,但通常不用于处理结果。不要使用RequestListener,而应考虑让回调实现Target接口并使用into传递它。
或者你可以只延长SimpleTarget并把它传递给你正在尝试使用RequestListener以同样的方式每个请求:
Target target = Glide.with(context)
...
.into(new SimpleTarget<Bitmap>(width, height) {
@Override
public void onResourceReady(Bitmap resource, GlideAnimation glideAnimation) {
callback.onDone(resource);
}
@Override
public void onLoadFailed(Exception e, Drawable errorDrawable) {
callback.onDone(null);
}
});
// At some point later, if you want to cancel the load:
Glide.clear(target);
您将要提供的宽度和高度,以便能够滑翔适当地下采样和转换图像。如果您在视图中显示这些位图,也可能遇到取消问题,在这种情况下,我强烈建议将视图提供给您的加载API,并将视图传递给into,以便您处理大小和取消。
如果您不需要立即映像,或者您更愿意使用RequestListener作为回调函数,那么也可以调用'preload()'而不是'into()'。 –
我用滑翔3.7.0和下载图像是这样的:
要注意这一点很重要 - 它执行asyncroniously
Glide.with(this)
.load(url)
.downloadOnly(new SimpleTarget<File>() {
@Override
public void onResourceReady(File resource, GlideAnimation<? super File> glideAnimation) {
LOGGER.debug("Photo downloaded");
}
});
当我需要显示缓存的图片,我用的是相同的URL和:
Glide.with(this)
.load(url)
.diskCacheStrategy(DiskCacheStrategy.SOURCE)
.into(imageView);
尝试参照该:[链接](http://android-developers.blogspot.in/2010/07/multithreading-for-performance.html)。 –