一、简介
在泰国举行的谷歌开发者论坛上,谷歌为我们介绍了一个名叫Glide的图片加载库,作者是bumptech。这个库被广泛的运用在Google的开源项目中,包括2014年Google I/O大会上发布的官方App。
Glide是一款由Bump Technologies开发的图片加载框架,使得我们可以在Android平台上以极度简单的方式加载和展示图片。Glide默认使用HttpUrlConnection进行网络请求,为了让App保持一致的网络请求形式,可以让Glide使用我们指定的网络请求形式请求网络资源。
优点有
使用简单
可配置度高,自适应程度高
支持常见图片格式,jpg、png、gif、webp
支持多种数据源,网络、资源、assets 、File、Uri等
高效缓存策略支持内存和硬盘缓存
生命周期集成根据Activity/Fragment生命周期自动管理请求
高效处理Bitmap
可能大家以前用过Picasso,Glide是Picasso的升级版,具体的差异,大家可以看看这篇文章
http://www.jcodecraeer.com/a/anzhuokaifa/androidkaifa/2015/0327/2650.html
二、依赖
1.jar包
Github地址:https://github.com/bumptech/glide/releases
2.Gradle
dependencies {
compile 'com.github.bumptech.glide:glide:3.7.0'
compile 'com.android.support:support-v4:23.3.0'
}
当然,现在Android studio 就不用导入compile 'com.android.support:support-v4:23.3.0'
因为Android studio已经为我们导入好了。
三、权限
<uses-permission android:name="android.permission.INTERNET" />
四、混淆
-keep public class * implements com.bumptech.glide.module.GlideModule
-keep public enum com.bumptech.glide.load.resource.bitmap.ImageHeaderParser$** {
**[] $VALUES;
public *;
}
五、使用
Glide.with(Context context);
Glide.with(Context context);
Glide.with(Activity activity);
Glide.with(FragmentActivity activity);
Glide.with(Fragment fragment);
不管是在Activity还是Fragment中调用with()方法,都可以直接传this。将Activity/Fragment作为with()参数的好处是,图片加载会和Activity/Fragment的生命周期保持一致。
1、Glide支持网络资源、assets资源、Resources资源、File资源、Uri资源、字节数组
Glide.with(context).load("http://xxx.jpg").into(imageView); Glide.with(context).load("file:///xxx.png").into(imageView); Glide.with(context).load(R.mipmap.ic_launcher).into(imageView); File file = new File(getExternalCacheDir() + "/image.jpg"); Glide.with(context).load(file).into(imageView); Glide.with(context).load(uri).into(imageView); Glide.with(context).load(byte[]).into(imageView);
2、不管我们传入的是一张普通图片,还是一张GIF图片,Glide都会自动进行判断,并且可以正确地把它解析并展示出来。
如果加载静态gif图片,在界面上显示第一帧的图片:
Glide.with(this).load(imageUrl).asBitmap().into(imageView);
3、加载动态gif图片
Glide.with(this).load(imageUrl).asGif().into(imageView);
如果指定了只能加载动态图片,而传入的图片却是一张静图的话,那么就加载失败。
4、占位图,设置加载中图片
.placeholder(R.drawable.placeholder)
设置加载失败图片
.error(R.drawable.error)
5、先加载缩略图 然后在加载全图
Glide.with(this).load(imageUrl).thumbnail(0.1f).into(imageView);
6、动画
淡入淡出效果
Glide.with(this).load(imageUrl).crossFade().into(imageView);
无动画
Glide.with(this).load(imageUrl).dontAnimate().into(imageView);
自定义动画
Glide.with(this).load(imageUrl).animate(R.anim.alpha_in).into(imageView);
7、设置监听回调
Glide.with(this).load(imageUrl).listener(RequestListener listener).into(imageView);
8、设置加载尺寸
//指定尺寸,加载成800*800像素的尺寸
Glide.with(this).load(imageUrl).override(800, 800).into(imageView);
//拉伸截取中间部分显示
Glide.with(this).load(imageUrl).centerCrop().into(imageView);
//等比拉伸填满ImageView
Glide.with(this).load(imageUrl).fitCenter().into(imageView);
9、设置缓存策略
设置跳过内存缓存
Glide.with(this).load(imageUrl).skipMemoryCache(true).into(imageView);
设置缓存策略
Glide.with(this).load(imageUrl).diskCacheStrategy(DiskCacheStrategy.ALL).into(imageView);
DiskCacheStrategy.ALL:缓存源资源和转换后的资源
DiskCacheStrategy.NONE:不作任何磁盘缓存,禁用掉Glide的缓存功能
DiskCacheStrategy.SOURCE:缓存源资源
DiskCacheStrategy.RESULT:缓存转换后的资源
清理缓存
//清理磁盘缓存 需要在子线程中执行
Glide.get(this).clearDiskCache();
//清理内存缓存 可以在UI主线程中进
Glide.get(this).clearMemory();
10、Glide在Github上还有一个库,可以处理图片效果,比如裁剪、圆角、高斯模糊等等
引入依赖库
compile 'jp.wasabeef:glide-transformations:2.0.1'
实现高斯模糊
//radius取值1-25,值越大图片越模糊
Glide.with(context).load(url).bitmapTransform(new BlurTransformation(context, radius)).into(imageView);
参考:
http://blog.csdn.net/jiangtea/article/details/66975618?locationNum=9&fps=1
glide讲解视频: