我可以与Glide同步加载图像吗?

时间:2016-02-09 16:09:15

标签: android android-glide

我知道同步加载来自设备存储的位图并不是很实际,但我真的必须这样做。我还没有想出办法。

2 个答案:

答案 0 :(得分:18)

是可以的,并且在glide文档中。

例如,如果您需要同步检索位图,则可以执行以下操作:

Glide V3:

Bitmap myBitmap = Glide.with(applicationContext)
.load(yourUrl)
.asBitmap()
.into(500, 500)
.get()

Glide v4:

FutureTarget<Bitmap> futureBitmap = Glide.with(applicationContext)
                           .asBitmap()
                           .load(yourURL)) 
                           .submit();
Bitmap myBitmap = futureBitmap.get();

注意:此代码需要在后台运行,否则应用程序将崩溃。

答案 1 :(得分:0)

在图片加载后使用接口加载数据是更好的选择。

创建一个名为 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 方法的对象。