我正在做这样的事情来同步获取位图并使用imageView.setImageBitmap(bitmap)将其设置为图像;
return Glide
.with(mContext)
.load(url)
.asBitmap()
.into(width, height)
.get();
我需要同步执行,因为我在AsyncTask的doInBackground中执行此操作。我需要从后端获取图像URL,然后再加载滑动。后来我直接用滑动加载相同的url到视图中。 问题是图像没有缓存在磁盘中。对此有何解决方案?
答案 0 :(得分:1)
将diskCacheStrategy
添加到您的Glide,选择策略类型为来源
您可以了解为何使用此link
中的SOURCE DiskCacheStrategy.NONE
没有任何内容,正如所讨论的那样
DiskCacheStrategy.SOURCE
仅缓存原始的全分辨率图像。
DiskCacheStrategy.RESULT
仅缓存最终图像(默认行为)
DiskCacheStrategy.ALL
缓存图像的所有版本
尝试: 从URL获取位图:
return Glide
.with(mContext)
.load(url)
.asBitmap()
.diskCacheStrategy(DiskCacheStrategy.SOURCE)
.into(width, height)
.get();
在ImageView中加载:
Glide
.with(mContext)
.load(url)
.diskCacheStrategy(DiskCacheStrategy.SOURCE)
.into(imageView) // your ImageViewID here
获取Bitmap后将Image加载到ImageView中:
Glide.with(context)
.load(url)
.asBitmap()
.diskCacheStrategy(DiskCacheStrategy.SOURCE)
.into(new SimpleTarget<Bitmap>() {
@Override
public void onResourceReady(Bitmap resource, GlideAnimation<? super Bitmap> glideAnimation) {
iv_image.setImageBitmap(resource); // you can store resource to some variable too if you want to update more than 1 images or try it like iv_image2.setImageBitmap(resource)
iv_image.requestLayout();
}
});
答案 1 :(得分:0)
使用diskCacheStrategy
return Glide
.with(mContext)
.load(url)
.asBitmap()
.diskCacheStrategy(DiskCacheStrategy.ALL)
.into(width, height)
.get();
答案 2 :(得分:0)
我多次遇到这个问题,克服它的最好方法是在 glide CustomTarget
中获取数据后使用接口加载数据创建一个名为 OnglideLoaded.java 的新文件,如下所示:
import android.graphics.drawable.Drawable;
public interface OnGlideLoaded {
void onGlideLoaded(Drawable drawable);
}
现在为它创建 setter 方法,就像 glide 所在的位置:
public void setOnGlideLoaded(OnGlideLoaded onGlideLoaded) {
this.onGlideLoaded = onGlideLoaded;
}
不要在 Glide Target 中调用它:
Glide.with(context)
.asBitmap()
.load(uri)
.into(new CustomTarget<Bitmap>() {
@Override
public void onResourceReady(@NonNull Bitmap resource, @Nullable Transition<? super Bitmap> transition) {
icon = resource;
if (onGlideLoaded!=null){
//This will send the image to every registered interface
onGlideLoaded.onGlideLoaded(icon);
}
}
@Override
public void onLoadCleared(@Nullable Drawable placeholder) {
}
});
现在像这样在你想要图像的地方调用接口:
reference.setOnGlideLoaded(new OnGlideLoaded() {
@Override
public void onGlideLoaded(Drawable drawable) {
imageView.setImageBitmap(drawable);
}
});
<块引用>
在这里,引用将是您创建 setter 方法的对象。