一、Glide介绍
在Android开发中,图片加载是必不可少的,Glide作为谷歌推荐的图片库,现在越来越火。
Glide 是一个 Android 上的图片加载和缓存库,它不仅能实现平滑的图片列表滚动效果,还支持远程图片的获取、大小调整和展示,并且可以加载Gif动态图,可谓功能强大。在我看来,可能现在大部分小伙伴还是比较喜欢Image Loader,毕竟用了很多年,也习惯了,但是我们思维不能被它束缚,而且官方已经声明不再维护该库,难道已经完美了吗?Glide毕竟是谷歌推荐,已经开源,说明至少是稳定的,而且比较轻量,不管是功能还是性能上都优于其他的(个人意见)。
二、Glide集成
1.项目中集成Glide
在gradle中添加Glide库:
dependencies {
compile 'com.github.bumptech.glide:glide:3.7.0'
compile 'com.android.support:appcompat-v7:23.1.1'
}
Glide的集成离不开v4包,所以必须添加support包。
2.Glide集成其他库
Glide包含一些小的、可选的集成库,目前Glide集成库当中包含了访问网络操作的Volley和OkHttp:
(1)Volley集成
第一步、添加依赖
dependencies {
compile 'com.github.bumptech.glide:volley-integration:1.2.2'
compile 'com.mcxiaoke.volley:library:1.0.5'
}
第二步、创建Volley集成库的GlideModule
<meta-data
android:name="com.bumptech.glide.integration.volley.VolleyGlideModule"
android:value="GlideModule" />
然后改变混淆文件:
-keep class com.bumptech.glide.integration.volley.VolleyGlideModule
#or
-keep public class * implements com.bumptech.glide.module.GlideModule
(2)OkHttp集成
第一步、添加依赖
dependencies {
compile 'com.github.bumptech.glide:okhttp-integration:1.2.2'
compile 'com.squareup.okhttp:okhttp:2.0.0'
}
第二步、创建Volley集成库的GlideModule
<meta-data
android:name="com.bumptech.glide.integration.okhttp.OkHttpGlideModule"
android:value="GlideModule" />
然后改变混淆文件:
-keep class com.bumptech.glide.integration.okhttp.OkHttpGlideModule
#or
-keep public class * implements com.bumptech.glide.module.GlideModule
(3)集成转换器(此处只介绍集成库,使用后面再讲)
第一步、gradle添加依赖
repositories {
jcenter()
mavenCentral() // GPUImage for Android
}
dependencies {
compile 'jp.wasabeef:glide-transformations:2.0.1'
// If you want to use the GPU Filters
compile 'jp.co.cyberagent.android.gpuimage:gpuimage-library:1.3.0'
}
通过这个转换器库,可以实现各式各样的图片,非常强大。
三、Glide配置
Glide如同ImageLoader一样,也是可以配置一些属性的,Glide可以在GlideModel中统一配置其属性。
1.第一步:
public class GlideModelConfig implements GlideModule {
int diskSize = 1024 * 1024 * 100;
int memorySize = (int) (Runtime.getRuntime().maxMemory()) / 8; // 取1/8最大内存作为最大缓存
@Override
public void applyOptions(Context context, GlideBuilder builder) {
// 定义缓存大小和位置
builder.setDiskCache(new InternalCacheDiskCacheFactory(context, diskSize)); //内存中<