1. 概述
2. 用法
首先要引入类库
compile 'com.github.bumptech.glide:glide:3.7.0'
2.1 基本用法
加载图片很方便
/**
* Glide 默认采用HttpURLConnection ,并且支持OkHttp,Volley
*/
Glide.with(this)
.load(url)
.placeholder(R.mipmap.ic_launcher)
.crossFade()
.centerCrop()
.animate(R.anim.anim)
.listener(new RequestListener<String, GlideDrawable>() {
@Override
public boolean onException(Exception e, String model, Target<GlideDrawable> target, boolean isFirstResource) {
return false;
}
@Override
public boolean onResourceReady(GlideDrawable resource, String model, Target<GlideDrawable> target, boolean isFromMemoryCache, boolean isFirstResource) {
return false;
}
})
.into(imageview);
}
}
2.2 几种加载方式 ,可以加载多种数据源:url、uri、本地文件、资源文件等
DrawableTypeRequest<String> load(String string)
DrawableTypeRequest<Uri> load(Uri uri)
DrawableTypeRequest<File> load(File file)
DrawableTypeRequest<Integer> load(Integer resourceId)
DrawableTypeRequest<URL> load(URL url)
2.3 监听
Glide可以设置监听,图片加载是否成功。失败可以看到相应错误日志
new RequestListener<String, GlideDrawable>() {
@Override
public boolean onException(Exception e, String model, Target<GlideDrawable> target, boolean isFirstResource) {
return false;
}
@Override
public boolean onResourceReady(GlideDrawable resource, String model, Target<GlideDrawable> target, boolean isFromMemoryCache, boolean isFirstResource) {
return false;
}
}
2.4 设置图片大小
2.5 加载GIF
在加载gif 格式图片时,需要设置缓存策略,要不会非常慢
2.6 Glide网络加载方式
Glide内部默认是通过HttpURLConnection网络方式加载图片的,并且支持OkHttp,Volley
集成OkHttp 集成okhttp 2.x 和 okhttp 3.x代码不一样
okhttp 2.x 在gradle文件加入下面代码
//自动集成okhttp
compile 'com.github.bumptech.glide:okhttp-integration:1.4.0@aar'
compile 'com.squareup.okhttp:okhttp:2.2.0'
然后在 AndroidManifest.xml 文件添加
<meta-data
android:name="com.bumptech.glide.integration.okhttp.OkHttpGlideModule"
android:value="GlideModule" />
okhttp 3.x 在gradle文件加入下面代码
compile 'com.github.bumptech.glide:okhttp3-integration:1.4.0@aar'
compile 'com.squareup.okhttp3:okhttp:3.5.0'
然后在 AndroidManifest.xml 文件添加
<meta-data
android:name="com.bumptech.glide.integration.okhttp3.OkHttpGlideModule"
android:value="GlideModule" />
Gradle 会自动合并必要的 GlideModule到你的 Android.Manifest。Glide 会认可在 manifest 中的存在,然后使用 OkHttp 做到所有的网络连接。
集成Volley
//自动集成volley
compile 'com.github.bumptech.glide:volley-integration:1.4.0@aar'
compile 'com.mcxiaoke.volley:library:1.0.19'
然后在 AndroidManifest.xml 文件添加
<meta-data
android:name="com.bumptech.glide.integration.volley.VolleyGlideModule"
android:value="GlideModule" />
这将添加 Volley 并集成该库到你的项目中。集成库添加到 GlideModule
到你的Android.Manifest。Glide 会自动认出它,然后使用 Volley 作为网络库。并不要求做其他的配置!
警告::如果你把这两个库都在你的 build.gradle中声明了,那这两个库都会被添加。因为 Glide 没有任何特殊的加载顺序,你将会有一个不稳定的状态,它并不明确使用哪个网络库,所以确保你只添加了一个集成库。
其他网络库
如果你是别的网络库的粉丝,你是不幸的。Glide 除了 Volley 和 OkHttp 外不会自动配置其他的库。然而你随时可以整合你喜欢的网络库,在 GitHub 上去开一个 pull request。为Volley 和 OkHttp 可能给你一个方向。
2.7 自定义动画
在前面我们已经提到过Glide提供了一个渐入渐出的动画效果,当然该动画不是那么酷炫,而且有时并不能达到我们想要的效果,不过Glide给我们提供了animate()方法,我们可以通过此方法实现我们自定义的动画效果。
animate(int animationId)
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
android:fillAfter="false"
android:duration="3000">
<scale
android:duration="@android:integer/config_longAnimTime"
android:fromXScale="0.1"
android:fromYScale="0.1"
android:pivotX="50%"
android:pivotY="50%"
android:toXScale="1"
android:toYScale="1"/>
<rotate
android:fromDegrees="0"
android:toDegrees="90"
android:pivotX="50%"
android:pivotY="50%"
/>
</set>
2.8 Target
当我们只需要一个bitmap时,可以使用这个办法 。
Glide.with(this)
.load(url)
.placeholder(R.mipmap.ic_launcher)
.crossFade()
.centerCrop()
.animate(R.anim.anim)
.listener(new RequestListener<String, GlideDrawable>() {
@Override
public boolean onException(Exception e, String model, Target<GlideDrawable> target, boolean isFirstResource) {
return false;
}
@Override
public boolean onResourceReady(GlideDrawable resource, String model, Target<GlideDrawable> target, boolean isFromMemoryCache, boolean isFirstResource) {
return false;
}
})
.into(target);
// .into(imageview);
}
private SimpleTarget target = new SimpleTarget<Bitmap>() {
@Override
public void onResourceReady(Bitmap bitmap, GlideAnimation glideAnimation) {
// do something with the bitmap
// for demonstration purposes, let's just set it to an ImageView
imageview.setImageBitmap( bitmap );
}
};
2.9 自定义转换 transform
可以实现图片的一些特效,如圆角、高斯模糊、旋转等。
为了实践自定义转换,你将需要创建一个新类,它实现了 Transformation 接口。要实现这个方法还是比较复杂的,你必须要有对 Glide 内部架构方面的洞察力才能做的比较棒。如果你只是想要对图片(不是 Gif 和 video)做常规的 bitmap 转换,我们推荐你使用抽象类 BitmapTransformation。它简化了很多的实现,这应该能覆盖 95% 的应用场景啦。
/**
* Created by dell on 2016/9/20.
*/
public class BlurTransformation extends BitmapTransformation {
public BlurTransformation(Context context) {
super( context );
}
@Override
protected Bitmap transform(BitmapPool pool, Bitmap toTransform, int outWidth, int outHeight) {
return null; // todo
}
@Override
public String getId() {
return null; // todo
}
}
定义完成之后,在加载图片时设置如下:
Glide
.with( context )
.load( eatFoodyImages[0] )
.transform( new BlurTransformation( context ) )
//.bitmapTransform( new BlurTransformation( context ) ) // this would work too!
.into( imageView1 );
Github上有个开源项目 ,glide-transformations,它为 Glide 转换提供了多种多样的实现。非常值得去看一下,说不定你的想法已经在它那里实现了。
2.10 自定义GlideModule
Glide 一些配置都在这里设置,设置图片质量、缓存大小及目录等
/**
* Created by xiehui on 2016/8/29.
*/
public class ConfigurationGlide implements GlideModule {
@Override
public void applyOptions(final Context context, GlideBuilder builder) {
//配置 , 默认是ARGB8888(每像素4字节存储) 和 RGB565(每像素2字节存储)
builder.setDecodeFormat(DecodeFormat.PREFER_ARGB_8888);
//磁盘缓存默认是250M,路径名image_manager_disk_cache如下
builder.setDiskCache(new InternalCacheDiskCacheFactory(context, 1024 * 1024 * 100));//内部磁盘缓存
builder.setDiskCache(new ExternalCacheDiskCacheFactory(context, 100 * 1024 * 1024));//磁盘缓存到外部存储
//指定缓存目录1
String downLoadPath = Environment.getDownloadCacheDirectory().getPath();
builder.setDiskCache(new DiskLruCacheFactory(downLoadPath, 1024 * 1024 * 100));
//指定缓存目录2
builder.setDiskCache(new DiskCache.Factory() {
@Override
public DiskCache build() {
File cacheLocation = new File(context.getExternalCacheDir(), "cache_dir");
cacheLocation.mkdirs();
return DiskLruCacheWrapper.get(cacheLocation, 1024 * 1024 * 100);
}
});
}
@Override
public void registerComponents(Context context, Glide glide) {
}
}
在manifest文件中添加配置
<meta-data android:name="demo.com.eventbusdemo.ConfigurationGlide"
android:value="GlideModule"/>
2.11
参考文档
1、详谈高大上的图片加载框架Glide -应用篇
2、详谈高大上的图片加载框架Glide -源码篇
3、Glide - 开始 ! :对Gldie有全面介绍,基本用法及高级用法
4、Glide Github主页
网友评论