Glide 使用 override(Target.SIZE_ORIGINAL) 部分机型出现的异常
Glide 在使用 .override(Target.SIZE_ORIGINAL) 时候, 部分机型(尤其是很不OK的小米) 出现内存过大导致的运行时异常 :
new RequestOptions()
.centerCrop()
.dontAnimate()
.skipMemoryCache(false)
.diskCacheStrategy(DiskCacheStrategy.AUTOMATIC)
.override(Target.SIZE_ORIGINAL);
异常:
java.lang.RuntimeException: Canvas: trying to draw too large(108576768bytes) bitmap.
...
简单解决,给的一个确切的大小 :
override(ResUtils.getDimensionPixelSize(R.dimen.dp_200), ResUtils.getDimensionPixelSize(R.dimen.dp_300));
🌴 然鹅显示效果并不好... 需要进行宽高的重新测量才能获得更好的宽高:
1.配置
public static RequestOptions getRequestOptions() {
return new RequestOptions()
//注意: 对应的 ImageView 的裁切类型必须一致!!!
.centerCrop()
.dontAnimate()
//使用透明图占位图, 无缝过渡效果更佳!!!
.placeholder(R.mipmap.ic_glide_placeholder)
.error(R.mipmap.ic_glide_placeholder)
.skipMemoryCache(false)
.diskCacheStrategy(DiskCacheStrategy.ALL)
.override(ResUtils.getDimensionPixelSize(R.dimen.dp_180), ResUtils.getDimensionPixelSize(R.dimen.dp_260));
//小米会出现 内存过大导致的运行时异常
//.override(Target.SIZE_ORIGINAL)
//改为:
//.override(ResUtils.getDimensionPixelSize(R.dimen.dp_200), ResUtils.getDimensionPixelSize(R.dimen.dp_280));
}
2.加载方式:
Glide.with(imageView.context)
.load(url)
.apply(Global.getRequestOptions())
.transition(DrawableTransitionOptions.withCrossFade())
.into(object : CustomTarget<Drawable>() {
override fun onLoadCleared(placeholder: Drawable?) {
}
override fun onResourceReady(
resource: Drawable,
transition: Transition<in Drawable>?
) {
val imgWidth = resource.intrinsicWidth
val imgHeight = resource.intrinsicHeight
val realHeight =
Utils.getScreenWidth(Library.get().context) * imgHeight / imgWidth
val layoutParams = imageView.layoutParams
if (layoutParams != null) {
layoutParams.height = realHeight
imageView.layoutParams = layoutParams
}
Glide.with(imageView.context).load(url).into(imageView)
}
})

浙公网安备 33010602011771号