关于Glide加载图片自动转circleCrop问题

遇到一个很灵异的现象,记录。
开发中遇到使用Glide加载图片,本来矩形图片加载为圆形。以下为代码:

fun ImageView.load(path: Any) {
    if (path is Int) {
        this.setImageResource(path)
        return
    }
    Glide.with(context)
        .load(path)
        .dontAnimate()
        .diskCacheStrategy(DiskCacheStrategy.ALL)
        .placeholder(this.drawable)
        .into(this)
}
       holder.getView<ImageView>(R.id.iv_plan_item_detail_bg).load(item.cover)

解决方法:
添加dontTransform()

    Glide.with(context)
        .load(path)
        .dontAnimate()
        .dontTransform()
        .diskCacheStrategy(DiskCacheStrategy.ALL)
        .placeholder(this.drawable)
        .into(this)

追溯原因:未知

后续

在一次偶然的时间发现了可能造成上述事件的原因。是因为当前页面别的组件有通过DataBinding加载了圆形图片,执行代码如下:

                Glide.with(context)
                	//加载配置,如圆形处理
                    .setDefaultRequestOptions(requestOptions)
                    .load(url)
                    .into(imageView)

重点在 setDefaultRequestOptions() 方法,由于Glide采用单例设计模式,该方法从命名上可以看出将把当前传入的配置设置为默认配置供后续使用,也就是在下一次重设配置之前,所有的默认配置都将参考这里的入参。
通常除了在初始化的时候是不能这么使用的,修改起来也比较容易,直接替换成**apply()**即可,如下:

                Glide.with(context)
                    .load(url)
                    .apply(requestOptions)
                    .into(imageView)

总结

一定要慎用类似 setDefaultXXX 等方法,知道调用位置还好,如果不知道就会非常难排查问题。

想了解具体原理的可以参考后面写的这一篇 Glide setDefaultRequestOptions 源码分析

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值