Glide引入
implementation 'com.github.bumptech.glide:glide:4.11.0'
Glide三级缓存
- 内存缓存,优先加载,速度最快
- 本地缓存,次优先加载,速度快
- 网络缓存,最后加载,速度慢,浪费流量
Glide.with(this)
.load(url)
.skipMemoryCache(false)
.into(imageView);
Glide.with(this)
.load(url)
.diskCacheStrategy(DiskCacheStrategy.RESULT)
.into(imageView);
- diskCacheStrategy( ) 中可以传入的参数有四种:
- DiskCacheStrategy.NONE: 表示不缓存任何内容。
- DiskCacheStrategy.SOURCE: 表示只缓存原始图片。
- DiskCacheStrategy.RESULT: 表示只缓存转换过后的图片(默认选项)。
- DiskCacheStrategy.ALL : 表示既缓存原始图片,也缓存转换过后的图片。
Glide的用法
private fun test(ivImg: ImageView) {
Glide.with(this)
.load(R.mipmap.ic_image)
.into(ivImg)
}
private fun test(ivImg: ImageView) {
val requestManager: RequestManager = Glide.with(this)
val requestBuilder: RequestBuilder<Drawable> = requestManager.load(R.mipmap.ic_image)
val viewTarget: ViewTarget<ImageView, Drawable> = requestBuilder.into(ivImg)
}
with
val requestManager: RequestManager = Glide.with(this)
- Glide不能在子线程中调用with
原因是子线程中不会去添加生命周期机制,主线程才会创建空白的Fragment去监听Activity的生命周期变化。
@NonNull
public static RequestManager with(@NonNull FragmentActivity activity) {
return getRetriever(activity).get(activity);
}
@NonNull
public RequestManager get(@NonNull FragmentActivity activity) {
if (Util.isOnBackgroundThread()) {
return get(activity.getApplicationContext());
} else {
assertNotDestroyed(activity);
FragmentManager fm = activity.getSupportFragmentManager();
return supportFragmentGet(activity, fm, null, isActivityVisible(activity));
}
}
load
val requestBuilder: RequestBuilder<Drawable> = requestManager.load(R.mipmap.ic_image)
Glide其他常用参数
Glide.with(MainActivity.this)
.load("url")
.override(150,150)
.centerCrop()
.placeholder(R.drawable.ic_launcher_background)
.error(R.drawable.ic_launcher_background)
.skipMemoryCache(true)
.diskCacheStrategy(DiskCacheStrategy.ALL)
.into(imageView);
Glide加载Bitmap的问题
ByteArrayOutputStream baos = new ByteArrayOutputStream();
bitmap.compress(Bitmap.CompressFormat.PNG, 100, baos);
byte[] bytes=baos.toByteArray();
Glide.with(mContext)
.load(bytes)
.centerCrop()
.override(Utils.px2dip(mContext,130),Utils.px2dip(mContext,130))
.placeholder(me.iwf.photopicker.R.drawable.__picker_ic_photo_black_48dp)
.error(me.iwf.photopicker.R.drawable.__picker_ic_broken_image_black_48dp)
.into(holder.ivPhoto);
设置scaleType
.centerCrop();
.fitCenter();