Glide-4.0.0缺少占位符,错误,GlideApp,并且无法解析其方法占位符,错误


84

我想使用Glide Android库下载图像并在中显示ImageView

在以前的版本中,我们使用:

Glide.with(mContext).load(imgUrl)
                .thumbnail(0.5f)
                .placeholder(R.drawable.PLACEHOLDER_IMAGE_NAME)
                .error(R.drawable.ERROR_IMAGE_NAME)
                .crossFade()
                .diskCacheStrategy(DiskCacheStrategy.ALL)
                .into(imageView);

但是我看过Glide文档:

它说用GlideApp.with()代替Glide.with()

我担心的是缺少占位符,错误,GlideApp和其他选项。

我在用

 compile 'com.github.bumptech.glide:glide:4.0.0'

我在哪里做错了?参考这里

如何GlideApp.with()使用?

该API与一起在同一包中生成,AppGlideModule并且GlideApp默认命名。应用程序可以通过启动所有负载与使用API GlideApp.with(),而不是Glide.with()

GlideApp.with(fragment)
   .load(myUrl)
   .placeholder(placeholder)
   .fitCenter()
   .into(imageView);


2
您对GlideApp有想法吗?如何使用以及何时使用?..如果没有,请投票
Ritesh Bhavsar

您缺少步骤2,请检查以下内容:bumptech.github.io/glide/doc/generatedapi.html
Oussema Aroua

请遵循此文档bumptech.github.io/glide/doc/getting-started.html#applicatio‌ns
Rohan Pawar

Answers:


222

尝试使用RequestOptions

RequestOptions requestOptions = new RequestOptions();
requestOptions.placeholder(R.drawable.ic_placeholder);
requestOptions.error(R.drawable.ic_error);

Glide.with(context)
     .setDefaultRequestOptions(requestOptions)
     .load(url).into(holder.imageView);

编辑

如果.setDefaultRequestOptions(requestOptions)不起作用,请使用.apply(requestOptions)

Glide.with(MainActivity.this)
            .load(url)
            .apply(requestOptions)
            .into(imageview);
 // or this
 Glide.with(MainActivity.this)
            .load(url)
            .apply(new RequestOptions().placeholder(R.drawable.booked_circle).error(R.drawable.booked_circle))
            .into(imageview);

 // or this
 Glide.with(MainActivity.this)
            .load(url)
            .apply(RequestOptions.placeholderOf(R.drawable.booked_circle).error(R.drawable.))
            .into(imageview);

编辑2奖金

这是Glide-4的其他一些变化


我也不知道@RiteshBhavsar它可以在我的设备中与新的Glide lib一起工作,您可以检查一下
AskNilesh

@NileshRathod RequestOptions应该以生成器样式使用: RequestOptions requestOptions = new RequestOptions().placeholder(R.drawable.ic_placeholder).requestOptions.error(R.drawable.ic_error);
Alexander Ukhov,

1
这是没有GlideApp的解决方法。请参阅github.com/bumptech/glide/issues/1945以了解如何添加GlideApp。
CoolMind

有什么办法可以获取位图输出,例如位图bitmap = Glide输出
Vipul Chauhan

30

如果使用Glide程序包依赖项,compile 'com.github.bumptech.glide:glide:3.7.0'则使用应该是使用以下代码:

GlideApp
    .with(your context)
    .load(url)
    .centerCrop()
    .placeholder(R.drawable.loading_image)
    .error(R.drawable.error_image)
    .into(myImageView);

注:文件

圆形图片:已知CircleImageView / CircularImageView / RoundedImageView与TransitionDrawable(带有.thumbnail()或.placeholder()的.crossFade()和动画GIF),使用BitmapTransformation(.circleCrop()在v4中可用)或.dontAnimate()解决此问题。

compile com.github.bumptech.glide:glide:4.1.1然后使用的最新更新版本应使用以下代码:

RequestOptions options = new RequestOptions()
                    .centerCrop()
                    .placeholder(R.drawable.default_avatar)
                    .error(R.drawable.default_avatar)
                    .diskCacheStrategy(DiskCacheStrategy.ALL)
                    .priority(Priority.HIGH)
                    .dontAnimate()
                    .dontTransform();

Glide.with(this)
     .load(url)
     .apply(options)
     .into(imageView);

查看最新版本的glide,错误修复和功能


glide是一个如此怪异的库,可以使用,它们尚未在github上更新
Anand Savjani

Ya @AnandSavjani他们没有在GitHub上更新,但是您可以在此链接中找到他们的更新github.com/bumptech/glide/releases
ND1010_

1
如果您不喜欢滑行,则可以创建自己的方式来加载图像,gif,它还提供缓存,您可以将其自由上传到github中并始终进行更新
ND1010_

10

如果要使用GlideApp,则必须添加到dependencies注释处理器,如屏幕截图所示:

如何将GlideApp添加到您的项目

然后在您的应用程序中包含一个AppGlideModule实现:

@GlideModule
public final class MyAppGlideModule extends AppGlideModule {}

不要忘记@GlideModule注释。然后,您需要构建项目。并且GlideApp会自动生成。


1
同步gradle后无法正常工作。但是我们需要进行重建才能使其正常运行。
拉维·亚达夫

6

依存关系:

compile 'com.github.bumptech.glide:glide:4.1.1'
annotationProcessor 'com.github.bumptech.glide:compiler:4.1.1'

添加一个带注释的AppGlideModule实现:

import com.bumptech.glide.annotation.GlideModule;
import com.bumptech.glide.module.AppGlideModule;

@GlideModule
public final class MyAppGlideModule extends AppGlideModule{}

此外,如果您使用了jack选项,为了避免以下类似错误,您需要使用Android Studio 3.0.0预览。

错误:任务':app:transformJackWithJackForDebug'的执行失败。com.android.jack.ir.JNodeInternalError:java.lang.Exception:java.lang.AssertionError:尚未实现


6

我们也不需要使用RequestOptions。

生成的API添加了一个GlideApp类,该类提供对RequestBuilder和RequestOptions子类的访问。RequestOptions子类包含RequestOptions中的所有方法以及GlideExtensions中定义的任何方法。RequestBuilder子类提供对生成的RequestOptions子类中所有方法的访问,而不必使用apply:

使用Glide:-

没有生成的API的请求可能如下所示:

Glide.with(fragment)
    .load(url)
    .apply(centerCropTransform()
        .placeholder(R.drawable.placeholder)
        .error(R.drawable.error)
        .priority(Priority.HIGH))
    .into(imageView);

使用GlideApp:-

使用生成的API,RequestOptions可以内联调用:

GlideApp.with(fragment)
    .load(url)
    .centerCrop()
    .placeholder(R.drawable.placeholder)
    .error(R.drawable.error)
    .priority(Priority.HIGH)
    .into(imageView);

您仍然可以使用生成的RequestOptions子类将相同的选项集应用于多个负载,但是生成的RequestBuilder子类在大多数情况下可能更方便。


4

加工

Glide.with(context!!)
     .load(user.profileImage)
     .apply (RequestOptions.placeholderOf(R.drawable.dummy_user))
     .into(edit_profile_image)

2

如果您想在应用程序中的所有地方使用通用的占位符,则可以这样操作:

当我们从Glide v4创建GlideModule时,您可以在项目中复制/粘贴该类,以便能够使用GlideApp类(更多步骤-请遵循以下步骤

@GlideModule
public class SampleGlideModule extends AppGlideModule {
    @Override
    public void applyOptions(@NonNull Context context, @NonNull GlideBuilder builder) {
        super.applyOptions(context, builder);
        builder.setDefaultRequestOptions(new RequestOptions().placeholder(R.drawable.logo).error(R.drawable.logo));
    }

    @Override
    public void registerComponents(@NonNull Context context, @NonNull Glide glide, @NonNull Registry registry) {
        super.registerComponents(context, glide, registry);
    }
}

您可以在此处为所有请求选项设置默认值

通过创建这个类,你不需要使用.placeholderGlideApp,它将会自动应用。


1
RequestOptions options = new RequestOptions()
            .placeholder(R.drawable.null_image_profile)
            .error(R.drawable.null_image_profile);
    //.centerCrop()
    //.diskCacheStrategy(DiskCacheStrategy.ALL)
    //.priority(Priority.HIGH);

    Glide.with(context).load(imageUrl)
            .apply(options)
            .into(profileImage);

1
请添加一些解释-仅仅一个普通的代码块并不能提供
足够的
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.