Glide中centerCrop与optionalCenterCrop方法的区别是什么?
Glide
centerCrop() 与 optionalCenterCrop() 的效果差异 核心行为区别
centerCrop():强制对所有加载的资源执行CenterCrop变换,覆盖ImageView默认的缩放规则。不管是占位图、错误图,还是最终加载成功的原图,也不管资源尺寸是否大于ImageView尺寸,都会统一执行裁剪逻辑:将资源等比例缩放到填满ImageView的边界,裁掉超出边界的部分,保证内容居中。optionalCenterCrop():仅对加载成功的原图执行条件性的CenterCrop变换:只有当原图的宽高都大于ImageView的宽高时才会触发裁剪;如果原图尺寸小于等于ImageView,就不会执行任何裁剪变换,直接按原图原始比例展示。同时该方法不会对placeholder、error等占位资源做任何变换,占位图会沿用ImageView本身的scaleType规则展示。
观察不到optionalCenterCrop()效果的常见原因
如果使用optionalCenterCrop()时没有明显效果,通常是两个原因导致的:
- 测试用的原图尺寸小于等于当前ImageView的尺寸,此时不会触发裁剪逻辑,看起来和不加裁剪的效果一致
- 观察的是占位图的展示效果,
optionalCenterCrop()不会处理占位资源,所以占位图的展示和没有加裁剪配置时完全一样
效果对比示例(ImageView固定为200*200dp)
- 当原图尺寸为500300px(大于ImageView)时:两个方法效果完全一致,都会裁剪为200200的居中内容
- 当原图尺寸为100100px(小于ImageView)时:
centerCrop()会强制将图片放大到200200后裁剪,图片可能出现模糊;optionalCenterCrop()不做放大裁剪,100*100的原图居中展示在ImageView中 - 当占位图尺寸为100100px时:
centerCrop()会强制将占位图放大裁剪到200200;optionalCenterCrop()不会处理占位图,直接沿用ImageView的scaleType展示
内容的提问来源于stack exchange,提问作者Rakesh L
相关产品推荐
相关产品推荐

