Android中如何使用Glide v4实现图片圆形变换显示
Glide v4 圆形图片加载及参数说明
一、Glide.with() 入参选择说明
Glide.with() 支持多种入参类型,this 是否可以直接使用取决于你编写代码的上下文:
- 如果你在
Activity中编写代码,直接传this即可,此时this本身就是Activity Context实例,Glide会自动绑定Activity生命周期,页面销毁时自动终止加载任务,避免内存泄漏 - 如果你在
Fragment中编写代码,也可以直接传this,Glide会绑定Fragment的生命周期 - 如果你在非页面类(比如列表Adapter、工具类)中编写代码,就需要传入Context实例,常见获取方式如下:
- 从Adapter构造方法传入宿主Activity/Fragment的context,或者直接用列表Item的View实例获取:
itemView.getContext() - 工具类场景可以传入全局Application Context,注意该场景下Glide的加载生命周期会和应用进程绑定,只有进程终止才会取消加载,适合不需要和页面生命周期绑定的全局加载场景
- 禁止使用无有效生命周期管控的静态Context引用,避免内存泄漏
- 从Adapter构造方法传入宿主Activity/Fragment的context,或者直接用列表Item的View实例获取:
二、Glide v4 正确实现圆形图片显示的方式
你现有代码的圆形裁剪逻辑基本正确,仅存在冗余声明RequestOptions options未使用的问题,可以删除冗余代码,也可以把所有配置整合到RequestOptions中统一管理,两种正确写法如下:
最简内联写法
// Activity/Fragment场景下传this,其他场景替换为对应Context即可 Glide.with(this) .load(urlProfileImg) .apply(RequestOptions.circleCropTransform()) .diskCacheStrategy(DiskCacheStrategy.ALL) .into(imgProfile);
复用配置写法(适合多处使用圆形裁剪的场景)
// 全局复用的圆形裁剪配置 RequestOptions circleCropOptions = new RequestOptions() .circleCrop() .diskCacheStrategy(DiskCacheStrategy.ALL); // 加载时直接传入统一配置 Glide.with(context) .load(urlProfileImg) .apply(circleCropOptions) .into(imgProfile);
异常排查
如果出现圆形裁剪不生效的情况,优先检查两点:
- 不要给ImageView设置
scaleType="fitXY",推荐使用centerCrop或者默认scaleType - 透明背景PNG图出现圆形边缘黑边的话,添加
.dontAnimate()配置取消默认过渡动画即可解决
内容的提问来源于stack exchange,提问作者rahul tripathi
相关产品推荐
相关产品推荐

