【问题标题】:Glide - Load a GIF as a placeholder滑行 - 将GIF称为占位符
【发布时间】:2019-05-23 19:46:47
【问题描述】:

我在我的 Android 项目中使用 Glide,我有一个 RecyclerView,其中包含 CardViews 的列表。我想做的是为每个CardView 加载图像,同时显示GIF 加载图像,直到加载真实图像。现在如果它尝试加载GIF作为主图像,没问题:

Glide.with(context)
        .load(R.raw.gif_loading_bar)
        .into(imageView);

上面的代码运行良好,GIF 被加载。但是当我尝试加载另一个图像并将GIF 设为占位符时,Android Studio 显示错误“Expected resource of type drawable”

Glide.with(mContext)
        .setDefaultRequestOptions(new RequestOptions()
                .placeholder(R.raw.gif_loading_bar))
        .load(imageUrl)
        .into(imageView);

我应该怎么做才能解决这个问题?

【问题讨论】:

    标签: android image gif android-glide


    【解决方案1】:

    Glide 确实支持 GIF 作为占位符。我最近遇到了这种情况并像下面这样解决了它。希望它可以帮助像我这样面临这种情况的人。

        var builder = Glide.with(mContext).load(path).apply(options).thumbnail(Glide.with(mContext).load(R.raw.loader2))
    if (listener == null) {
        builder = builder.addListener(object : RequestListener<Drawable> {
            override fun onLoadFailed(e: GlideException?, model: Any?, target: Target<Drawable>?, isFirstResource: Boolean): Boolean {
    
                //TODO; your code here
                return false
            }
    
            override fun onResourceReady(resource: Drawable?, model: Any?, target: Target<Drawable>?, dataSource: DataSource?, isFirstResource: Boolean): Boolean {
                //TODO; your code here
                return false
            }
        })
    } else {
        builder = builder.addListener(listener)
    }
    builder.into(myImageView)
    

    它的作用

    它将您的 gif 作为缩略图加载,直到从源下载图像。 在 onResourceReady 方法中,它会在资源准备好时为您提供回调。确保将 gif 文件放在 R.raw 包中,不在 drawable 包中。如果您遇到任何问题,请告诉我。

    【讨论】:

      【解决方案2】:

      很遗憾,Glide 不支持 GIF 占位符,如 this Github issuethis one 中所述。

      【讨论】:

        【解决方案3】:

        这应该可以完成工作:

        ImageView imageView = (ImageView) findViewById(R.id.imageView);
        GlideDrawableImageViewTarget imageViewTarget = new 
        GlideDrawableImageViewTarget(imageView);
        
        Glide.with(context)
            .asGif()
            .setDefaultRequestOptions(new RequestOptions()
                    .placeholder(R.raw.gif_loading_bar))
            .load(imageUrl)
            .into(imageView);
        

        更多信息herehere

        【讨论】:

        • 图像被加载,但它不动,就像任何静态的JPGPNG 图像。
        • 在答案中添加修复
        • Android Studio 找不到名为 GlideDrawableImageViewTarget 的类。
        • 您使用的是什么版本的 Glide?尝试使用 GlideDrawableImageViewTarget 的 DrawableImageViewTarget
        • 我正在使用版本4.8.0
        【解决方案4】:

        只需确保根据您的代码更改getContext()。例如,在我的情况下,我将其传递为 holder.img.getContext()

        Glide.with(getContext()).load(item[position])
                        .thumbnail(Glide.with(getContext()).load(R.drawable.gif_image))
                        .fitCenter()
                        .crossFade()
                        .into(imageView);
        

        【讨论】:

          猜你喜欢
          • 2014-07-31
          • 1970-01-01
          • 1970-01-01
          • 2016-03-14
          • 2019-02-03
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多