Glide 是一个 Android 上的图片加载和缓存库,其目的是实现平滑的图片列表滚动效果。
https://github.com/bumptech/glide
wiki:https://github.com/bumptech/glide/wiki
最近项目引入,glide图片加载,由于对于该图片加载的使用并不是很了解,因此,详细看了下wiki并且分享给需要的同学。
1、基本的加载方法
Glide.with(xxx.getContext()) .load(file) //可以从本地图片资源读取,也可以从Url去加载。 .crossFade()//显示渐变效果 .override(width, hight)//可以为图片手动设置宽度高度, // 当然你想加载原图,使用override(Target.SIZE_ORIGINAL, Target.SIZE_ORIGINAL) .into(xxx);
2、通过URL直接在后台下载图片,该方法请在子线程里执行。
public File downloadOriginalImage(String url) { if (TextUtils.isEmpty(url)) { return null; } FutureTarget<File> future = Glide.with(getActivity()) .load(url) .downloadOnly(Target.SIZE_ORIGINAL, Target.SIZE_ORIGINAL); try { //下载原图超时 25秒 return future.get(25L, TimeUnit.SECONDS); } catch (InterruptedException e) { e.printStackTrace(); } catch (ExecutionException e) { e.printStackTrace(); } catch (TimeoutException e) { e.printStackTrace(); } return null; }
3、glide全局配置
配置比较简单,只需要新增一个类并且实现了 GlideModule的接口
然后再AndroidManifest.xml 配置如下参数即可
<meta-data android:name="xxx.FlyGlideModule" //请填写具体的class完整路径 android:value="GlideModule" />
public class FlyGlideModule implements GlideModule {
public static final int yourSizeInBytes_disk=1024*1024*50;//默认50M本地缓存
public static final int yourSizeInBytes_memory=1024*1024*15;//默认15M内存
@Override
public void applyOptions(Context context, GlideBuilder builder) {
builder.setDiskCache(new DiskLruCacheFactory(new DiskLruCacheFactory.CacheDirectoryGetter() {
@Override public File getCacheDirectory() {
return new File(FlyEnvironment.IMAGE_CACHE);
}
}, yourSizeInBytes_disk));
builder.setMemoryCache(new LruResourceCache(yourSizeInBytes_memory));
}
@Override
public void registerComponents(Context context, Glide glide) {
}
}
4、图片加载暂停,重启(适用于ViewPage 或者Fragement的一些情况)
一、对于Viewpage,当我们有多个子Fragement的时候,我们需要当前页面的时候才开启图片加载,其他页面不可见的时候,暂停图片加载。
这个时候可以重写 Fragement的setUserVisibleHint方法,
@Override
public void setUserVisibleHint(boolean isVisibleToUser) {
super.setUserVisibleHint(isVisibleToUser);
try {
if(isVisibleToUser){
Glide.with((Fragment) this).resumeRequests();
}else{
Glide.with((Fragment)this).pauseRequests();
}
}catch (IllegalArgumentException e){
}
}
二、对于其他情况 可以再生命周期里做处理
比如: Activity 或者Fragement的
onStart ,onStop里面 做处理