Glide 在 onLoadFailed() 时使用默认图片

Glide use default image when onLoadFailed()

我用的是glide 4.7.1版本 我想在 onLoadFailed 时使用默认图像。

这是我的代码

Glide.with(context).load(imageUrl).listener(new RequestListener<Drawable>() {
    @Override
    public boolean onLoadFailed(@Nullable GlideException e, Object model, com.bumptech.glide.request.target.Target<Drawable> target, boolean isFirstResource) {
        // fail
        // How can i use default image in imgvAssetPicture?
    }

    @Override
    public boolean onResourceReady(Drawable resource, Object model, com.bumptech.glide.request.target.Target<Drawable> target, DataSource dataSource, boolean isFirstResource) {
        // success
        imgvLoadingProgressbar.setVisibility(View.INVISIBLE);
        imgvAssetPicture.setVisibility(View.VISIBLE);
        return false;
    }
}).into(imgvAssetPicture);
 Glide.with(passContext)
.applyDefaultRequestOptions(new RequestOptions()
.placeholder(R.drawable.ic_user_default)
.error(R.drawable.ic_user_default))
.load(url)
.into(image);

使用 4.7.1 版本(您正在使用),您可以轻松设置这些选项。

  • placeHolder 无图像时显示
  • error 当某些 URL 加载失败时。

奖金

您是否使用一些 ProgressBar 设置可见性,这是​​非常古老的做法。

CircularProgressDrawable,非常好用。只需将此 CircularProgressDrawable 传递到您的 placeHolder.

只需将这行代码复制并粘贴到您想使用的任何地方

简单易行

val circularProgressDrawable = CircularProgressDrawable(mContext)
circularProgressDrawable.strokeWidth = 5f
circularProgressDrawable.centerRadius = 30f
circularProgressDrawable.start()

        Glide.with(mContext)
            .load(specificCategoryObject.imgUrl)
            .placeholder(R.drawable.circularProgressDrawable)
            .transition(DrawableTransitionOptions.withCrossFade())
            .error(R.drawable.img_place_holder)
            .listener(object : RequestListener<Drawable> {

                override fun onLoadFailed(
                    e: GlideException?,
                    model: Any?,
                    target: Target<Drawable>?,
                    isFirstResource: Boolean
                ): Boolean {
                circularProgressDrawable.alpha = 0
                    return false
                }

                override fun onResourceReady(
                    resource: Drawable?,
                    model: Any?,
                    target: Target<Drawable>?,
                    dataSource: DataSource?,
                    isFirstResource: Boolean,
                ): Boolean {
                circularProgressDrawable.alpha = 0    
                    return false
                }
            })
            .into(holder.ivProductImage)