如果是Gilde使用上遇到问题,可以参考我上一篇文章
Gilde基本使用
这一篇文章主要为了记录 Gilde加载圆角失败,有可能的几个排查方向。
目录
使用 CenterCrop 和 RoundedCorners 配合
自定义 RoundedCornersTransformation
Glide 是一个强大的 Android 图片加载库,支持加载图片时设置圆角。你可以通过多种方式实现圆角效果,例如使用 RequestOptions
配合 RoundedCorners
或者自定义 Transformation
。
设置圆角常用的实现方法:
使用 RoundedCorners
Glide 提供了 RoundedCorners
,可以直接为图片设置圆角。
val requestOptions = RequestOptions().transform(RoundedCorners(20)) // 圆角半径为 20px
Glide.with(context)
.load(imageUrl)
.apply(requestOptions)
.into(imageView)
使用 CenterCrop
和 RoundedCorners
配合
先裁剪再设置圆角:
val requestOptions = RequestOptions()
.centerCrop()
.transform(RoundedCorners(20))
Glide.with(context)
.load(imageUrl)
.apply(requestOptions)
.into(imageView)
自定义 RoundedCornersTransformation
通过 GlideTransformations
扩展库实现更灵活的圆角设置
//引入依赖
implementation 'jp.wasabeef:glide-transformations:4.3.0'
//使用 RoundedCornersTransformation:
//参数说明:
//第一个参数是圆角半径(单位 px)。
//第二个参数是边框宽度(一般设置为 0)
Glide.with(context)
.load(imageUrl)
.apply(RequestOptions.bitmapTransform(RoundedCornersTransformation(20, 0)))
.into(imageView)
自定义 ShapeDrawable
适用于特殊需求,可以绘制更复杂的形状:
val drawable = ShapeDrawable(RoundRectShape(
floatArrayOf(20f, 20f, 20f, 20f, 20f, 20f, 20f, 20f), null, null))
drawable.paint.color = Color.WHITE
Glide.with(context)
.load(imageUrl)
.apply(RequestOptions().placeholder(drawable))
.into(imageView)
如果加载不成功排查方向
ImageView 的 ScaleType
- 检查你的
ImageView
是否设置了不支持圆角效果的scaleType
。 ImageView
的scaleType
设置为fitCenter
或centerCrop
,可能会与圆角效果冲突。
解决方案
将 scaleType
设置为 centerCrop
或者确保 Glide 中的 transform
方法(如 RoundedCorners
)覆盖了 ImageView 的 scaleType
设置。
<ImageView
android:id="@+id/imageView"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:scaleType="centerCrop" />
加载图片的类型
如果图片是矢量图(如 VectorDrawable
),Glide 的默认设置可能无法正确处理圆角。
解决方案:
Glide.with(context)
.load(imageUrl)
.apply(RequestOptions().transform(RoundedCorners(20)))
.into(imageView)
//如果仍然无效可以手动将矢量图转为 Bitmap:
val bitmap = BitmapFactory.decodeResource(context.resources, R.drawable.your_vector_drawable)
Glide.with(context)
.load(bitmap)
.apply(RequestOptions().transform(RoundedCorners(20)))
.into(imageView)
是否正确使用 Transformation
- 如果你没有使用
RoundedCorners
或其他Transformation
,图片不会应用圆角效果。 - 常见错误: 忘记调用
apply(RequestOptions().transform(...))
。
Glide.with(context)
.load(imageUrl)
.apply(RequestOptions().transform(RoundedCorners(20)))
.into(imageView)
圆角半径单位问题
Glide 的 RoundedCorners
使用像素(px)而非 dp 作为单位。
val radiusInPx = TypedValue.applyDimension(
TypedValue.COMPLEX_UNIT_DIP,
20f,
context.resources.displayMetrics
).toInt()
Glide.with(context)
.load(imageUrl)
.apply(RequestOptions().transform(RoundedCorners(radiusInPx)))
.into(imageView)
是否使用了占位图 (Placeholder)
如果占位图 (placeholder
) 没有设置圆角,加载时会显示未圆角化的图片。
Glide.with(context)
.load(imageUrl)
.placeholder(R.drawable.rounded_placeholder)
.apply(RequestOptions().transform(RoundedCorners(20)))
.into(imageView)
Glide 缓存问题
如果 Glide 缓存了旧的图片版本,可能会导致看不到圆角效果。
// 强制禁用缓存或清理缓存:
Glide.with(context)
.load(imageUrl)
.apply(RequestOptions()
.transform(RoundedCorners(20))
.skipMemoryCache(true)
.diskCacheStrategy(DiskCacheStrategy.NONE))
.into(imageView)
最后如果仍然显示不出圆角图片,你可以从以下几点排查
- 是否正确的导入了Gilde库和扩展图库
- Gilde版本问题,有时候引用的三方库可能依赖了低版本的Gilde库,而你加载引用的时候引用到了三方库中GIlde库。
- 图片源问题,当排除了所以问题,依然有问题,那么就要甩锅了。当然你排除了所有问题,依然不生效,那么别不自信,就是图片源的问题。
- 自定义View的问题。
希望以上提示和排查步骤可以帮你解决问题。所有的事情都可能不按照逻辑执行。但是代码必须可以,如果依然不行。重装AndroidStudio,开关机,重装系统,然后去厕所洗个手。相信我,可能真的有帮助。