Glide是一个快速高效的图像加载库,专注于平滑滚动。
Glide提供了一个易于使用的API,一个性能可扩展的资源解码流水线和自动资源池。
Glide支持网络,解码和显示视频静止图像,图像和动画GIF
使用前准备
官方地址:https://github.com/bumptech/glide
1.gradle中使用
repositories {
mavenCentral() // jcenter() works as well because it pulls from Maven Central
}
dependencies {
compile 'com.github.bumptech.glide:glide:4.0.0'
compile 'com.android.support:support-v4:25.3.1'
annotationProcessor 'com.github.bumptech.glide:compiler:4.0.0'
}
2.maven
<dependency>
<groupId>com.github.bumptech.glide</groupId>
<artifactId>glide</artifactId>
<version>4.0.0</version>
</dependency>
<dependency>
<groupId>com.google.android</groupId>
<artifactId>support-v4</artifactId>
<version>r7</version>
</dependency>
<dependency>
<groupId>com.github.bumptech.glide</groupId>
<artifactId>compiler</artifactId>
<version>4.0.0</version>
<optional>true</optional>
</dependency>
使用glide的基本模式
加载图片:
Glide.with(fragment)
.load(url)
.into(imageView);
取消加载(必须在子线程):
Glide.with(fragment).clear(imageView);
手动调用clear方法可以清除掉我们之前给view添加的图片,当然一般我们不需要这么做,因为在into()方法调用之前,会自动调用一次clear()方法清除掉之前的加载
方法
1.with()
with方法需要传入一个上下文对象,可以是activity,fragment,context或者fragmentActivity,对应图片加载的生命周期。返回requestManager对象。
2.load()
看传入的参数就可以发现我们能加载的哪些途径的图片
1. load(string)、load(url):加载网络图片
Glide.with(this).load(url).into(imageView); 或
String path = "file://"+ Environment.getExternalStorageDirectory().getPath()+"/mypic.jpg";
Glide.with(this).load(path).into(imageView);
2.load(uri):从uri获取
Uri uri = Uri.parse("android.resource://" + this.getPackageName() + "/" + R.mipmap.ic_launcher);
Glide.with(this).load(uri).into(imageView);
3.load(File file) 从文件加载
Glide.with(this).load(file).into(imageView);
4.load(Integer resourceId) 从Resource中加载
Glide.with(this).load(R.mipmap.ic_launcher).into(imageView);
5.load(byte[] model)
Bitmap bmp = BitmapFactory.decodeResource(getResources(), R.mipmap.error);
byte[] model = Bitmap2Bytes(bmp);
Glide.with(this).load(model).into(imageView);
public byte[] Bitmap2Bytes(Bitmap bm) {
ByteArrayOutputStream baos = new ByteArrayOutputStream();
bm.compress(Bitmap.CompressFormat.PNG, 100, baos);
return baos.toByteArray();
}
DrawableTypeRequest
load方法返回一个DrawableTypeRequest对象,DrawableTypeRequest提供了一些我们在加载图片的时候可以使用方法,我们可以根据我们的需要来调用相应的方法
1. placeholder
占位图,也就是从开始加载到加载结束这段时间内显示的默认图片,placeholder有两个重载方法:
同时,也可以传入一个颜色值
Glide.with(this).load(url).placeholder(R.mipmap.loading).into(imageView);
Glide.with(this).load(url).placeholder(R.color.colorAccent).into(imageView);
2.error
异常图,加载出现异常的时候显示的图片,使用方法和placeholder一样,也可以传颜色值
3.fallback
设置model为空时显示的Drawable。
4.skipMemoryCache
该方法可以设置图片不缓存到内存中,默认缓存,此方法必须在UI线程调用
5.diskCacheStrategy
DiskCacheStrategy.ALL 缓存所有版本图片,这是Glide默认磁盘缓存策略
DiskCacheStrategy.NONE 不缓存
DiskCacheStrategy.SOURCE 缓存原始图片
DiskCacheStrategy.RESULT 缓存最终图像,也就是根据ImageView大小转换后的图片
6.override
代码中指定imageview的大小
Glide.with(this).load(url).override(200,200).into(imageView);
需要注意的是这里的单位是像素
7.CenterCrop() & .fitCenter()
CenterCrop()缩放图像让它填充到 ImageView 界限内并且裁剪额外的部分,ImageView 可能会完全填充,但图像可能不会完整显示。
fitCenter()缩放图像让图像测量出来等于或小于 ImageView 的边界范围。该图像将会完全显示,但可能不会填满整个 ImageView。
Glide.with(this).load(url).fitCenter().into(imageView);
8.thumbnail
缩略图,限价在缩略图在加载要显示的图片
Glide.with(this).load(url).thumbnail(0.1f).into(imageView);
可以加载一个URL图片作为缩略图
DrawableRequestBuilder<String> thumbnailRequest = Glide.with(this).load(thumbUrl);
Glide.with(this).load(url).thumbnail(thumbnailRequest).into(imageView);
9.priority
设置请求的优先级,此方法给定了如下几个可选值,它们的优先级依次递减:
public enum Priority {
IMMEDIATE,
HIGH,
NORMAL,
LOW, priority,
}
10.crossFade() & .dontAnimate() & .animate()
.crossFade() 表示淡入淡出效果
.dontAnimate() 表示无动画效果
.animate() 可以加载我们自己定义的动画
11.listener
监听请求状态,此方法需要一个RequestListener类型参数,有两个回调方法;
onException返回true表示我们自己处理掉了异常,false表示交给Glide去处理;方法最好返回false,这样的话Glide会自动回调.error();
onResourceReady返回true表示用户自己已经设置好资源,包括截取操作,动画操作之类的,准备好显示;false表示交给Glide。
Glide.with(this)
.load(url)
.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;
}
})
.error(R.mipmap.error)
.into(imageView);
12. Gif的加载
一般情况下和加载静态图片一样
Glide.with(this).load(gifUrl).into(imageView);
当然也提供了设置加载的图片类型
.asBitmap() 无论你传入的URL对应的是不是一个Gif,Glide都会把它当做静态图,这时的静态图会停留在Gif的第一帧
.asGif() 无论你传入的URL对应的是不是一个Gif,Glide都会把它当做Gif来处理,如果不是,Glide会回调.error()方法
13.Glide播放本地视频
Glide.with(this).load(Uri.fromFile(new File(filePath))).into(imageView);
注意:Glide只可播放本地视频文件,不可播放网络文件。