前言
有段时间没做 Android 开发了,目前一直在从事 JavaWeb 相关工作。最近打算做一款 Android 应用,在使用 Glide 的时候,发现 Glide已经升级到 4.0 RC版了。虽然之前整理过 Glide 的使用,4.0 RC版还是有不少区别的,所以抽时间重新整理下。
关于版本简单说明下,目前Glide 4.0版本是由Google的各种团队内部使用,4.0被认为是内部稳定的。但外部用户可能会发现内部尚未发现的问题。因此,将此作为RC发布。如果没有发现稳定性或API中的重大问题,预计不久之后就会发布非RC版本。
Glide 简介
Glide是一个面向Android快速和高效的开源媒体管理(open source media management )和图片加载(image loading )的框架,使用指定的接口很容易在一个案例中实现媒体解码(media decoding),内存(memory)和磁盘缓存(disk caching),资源池(resource pooling)的功能。
Glide支视三种类型的资源:视频,图片,动画GIF,对其进行获取,解码,显示操作。Glide拥有灵活的API,允许开发人员自定义添加网络堆栈(Network stack)。Glide默认使用HttpUrlConnection的网络堆栈,也可以使用Google的Volley库和Squareas的OkHttp库来替代。
Glide的主要重点是平滑和快速的滚动任何类型的图像列表。同时,Glide也高效的适用于这些情况,例如:获取,调整大小,显示远程图像。
github地址:
https://github.com/bumptech/glide
doc地址:
http://sjudd.github.io/glide/
Glide 配置
1. 在Gradle中引入
dependencies {
compile 'com.github.bumptech.glide:glide:4.0.0-RC1'
annotationProcessor 'com.github.bumptech.glide:compiler:4.0.0-RC1'
}
2. 在proguard中添加混淆规则
-keep public class * implements com.bumptech.glide.module.GlideModule
-keep public class * extends com.bumptech.glide.AppGlideModule
-keep public enum com.bumptech.glide.load.resource.bitmap.ImageHeaderParser$** {
**[] $VALUES;
public *;
}
小试牛刀
使用Glide加载图片是很容易的,在很多情况下只需要一行代码。
Glide.with(this).load(IMG_URL).into(testIv1);
//如果加载网络图片,记得添加权限哦~
V3 到 V4 的改变
Glide V4变化较大的是库处理选项的方式。在Glide v3中,选项是由一系列复杂的多类型构建器单独处理的。在Glide v4中,这些已被具有单一类型的单个构建器和可以提供给构建器的一系列选项的对象所替代。Glide 生成的API通过将选项对象和任何包含的集成库与构建器的选项合并,来创建单个流畅的API。
可以简单理解为,Glide v4 将Glide V3中Glide.with()实现的一系列复杂功能拆分成一些独立的API。大体上说,以下几个方面是全新功能。
Options
RequestBuilder
RequestOptions
TransitionOptions
Generated API
Types and Targets
Picking Resource Types
Drawables
Targets
Cancellation
Configuration
Applications
Libraries
Manifest parsing
RequestOptions
RequestOptions请求设置,V4 已经将大多数的设置已经放到了RequestOptions对象中。包括:
- Placeholders 占位图片
- Transformations 变换的操作
- Caching Strategies 缓存策略
- Component specific options, like encode quality, or decode Bitmap configurations. 其他设置,如编码质量、Bitmap配置等。
1. RequestOptions对象的创建
RequestOptions myOptions = new RequestOptions();
//后面可以链式操作
2. Placeholders 占位图片
2.1. placeholder
设置加载中的图片。当请求资源的过程中,加载中的图片会被显示。当资源请求成功后,加载中的图片会被请求的资源替换掉。如果请求的是内存资源,加载中的图片可能永远无法被显示。如果请求失败,而error图片没有被设置,那么加载中的图片将会一直被显示。或者url为null,而fallback图片没有被设置,那么加载中的图片也将会一直被显示。
placeholder(R.drawable.placeholder)
//或者
placeholder(new ColorDrawable(Color.BLACK))
2.2. error
当请求失败的时候,error资源被显示。又或者url为null,而fallback图片没有被设置,那么加载中的图片也将会一直被显示。
error(R.drawable.error)
//或者
error(new ColorDrawable(Color.RED))
2.3. fallback
当url为空的时候,fallback图片被显示。
fallback(R.drawable.fallback)
//或者
fallback(new ColorDrawable(Color.GREY))
3. Transformations 变换的操作
比如设置圆角图片
transform(new CircleCrop())
4. 设置尺寸及填充方式
3.1 override(width, height)
设置图片尺寸,当ImageView为wrap尺寸时有效
3.2 centerCrop()
拉伸截取中间部分显示
3.3 fitCenter()
等比拉伸填满ImageView
5. RequestOptions对象的创建后,可以被RequstBuilder多次使用,通过apply()方法调用。
RequestOptions requestOptions = new RequestOptions()
.placeholder(R.mipmap.placeholder) //加载中图片
.error(R.mipmap.error) //加载失败图片
.fallback(R.mipmap.fallback) //url为空图片
.centerCrop() // 填充方式
.override(600,600) //尺寸
.transform(new CircleCrop()) //圆角
.priority(Priority.HIGH) //优先级
.diskCacheStrategy(DiskCacheStrategy.NONE); //缓存策略,后面详细介绍
Glide.with(this).load(IMG_URL1).apply(requestOptions).into(testIv1);
Glide.with(this).load(IMG_URL2).apply(requestOptions).into(testIv2);
TransitionOptions
TransitionOptions是用来设置占位图片或者缩略图片切换到真正需要加载的图片之间的过度效果。
1. 常用效果
- crossFade()
- animate()
2. 移除效果
- dontTransition()
3. 三个子类
- GenericTransitionOptions
- DrawableTransitionOptions
- BitmapTransitionOptions
3. 通过RequestBuilder的transition加载
Glide.with(this).load(IMG_URL1).apply(requestOptions)
.transition(new DrawableTransitionOptions().crossFade(2000)) //淡入淡出2秒
.into(testIv1);
RequestBuilder
1. 概述
requestbuilder是请求的主体,负责请求的各种操作,并开始请求。
使用requestbuilder可以指定:
- 资源要加载的类型(Bitmap, Drawable等)
- 加载资源的URL / Model
- 载入资源
- 设置requestoption对象
- 设置transitionoption对象
- 设置thumbnail()缩略图对象
- 设置listener监听
2. 资源要加载的类型
requestbuilders针对资源类型进行加载。资源类型包括Bitmap,Drawable,GifDrawable等。默认情况下,你会得到一个Drawable RequestBuilder。您可以使用as...的方法更改请求的类型。例如
RequestBuilder<Bitmap> requestBuilder = Glide.with(fragment).asBitmap();
3. 其他常用方法
3.1 加载资源的URL / Model
load(url)
3.2 载入资源
into()
3.3 设置thumbnail()缩略图对象
thumbnail(Glide.with(this).load(thumb_url)
3.4 设置requestoption对象
apply(requestOptions);
3.5 设置transitionoption对象
transition(transitionOptions)
3.6 设置listener监听
listener(requestListener)
4. 示例代码
RequestOptions requestOptions = new RequestOptions()
.centerCrop() // 填充方式
.override(600,600) //尺寸
.transform(new CircleCrop()) //圆角
.priority(Priority.HIGH) //优先级
.diskCacheStrategy(DiskCacheStrategy.NONE); //缓存策略,后面详细介绍
RequestBuilder<Drawable> requestBuilder = Glide.with(this)
.load(IMG_URL1);
requestBuilder
// .thumbnail(Glide.with(this).load(R.mipmap.error)) //缩略图
.apply(requestOptions) //requestOptions
.transition(new DrawableTransitionOptions().crossFade(2000)) //变换
.listener(new RequestListener<Drawable>() {
@Override
public boolean onLoadFailed(@Nullable GlideException e, Object model, Target<Drawable> target, boolean isFirstResource) {
Log.e("Tag", "onLoadFailed : " + e.getMessage());
return false;
}
@Override
public boolean onResourceReady(Drawable resource, Object model, Target<Drawable> target, DataSource dataSource, boolean isFirstResource) {
Log.e("Tag", "onResourceReady : " + resource);
return false;
}
})
.into(testIv1);
点滴分享 共同进步
网友评论