本次项目中使用了 Glide 图片加载库。Glide 是 Google 官方推荐的一个图片加载的开源库,可以很简洁地加载网络图片。
使用 Glide 首先需要导入 Glide 的依赖,在 build.gradle
文件中添加:
dependencies {
implementation 'com.github.bumptech.glide:glide:4.9.0'
}
如果 Glide 需要从网络中加载图片,则还需要在 Manifest
文件中添加网络访问权限:
<uses-permission android:name="android.permission.INTERNET" />
Glide.with() 图片加载的环境:1,Context对象。2,Activity对象。3,FragmentActivity对象。4,Fragment对象
.load() 加载资源:1,drawable资源。2,本地File文件。3,uri。4,网络图片url。5,byte数组(可以直接加载GIF图片)
.placeholder() 图片占位符
.error() 图片加载失败时显示
.crossFade() 显示图片时执行淡入淡出的动画默认300ms
.dontAnimate() 不执行显示图片时的动画
.override() 设置图片的大小
.centerCrop() 和 fitCenter() 图片的显示方式
.animate() view动画 2个重构方法
.transform() bitmap转换
.bitmapTransform() bitmap转换。比如旋转,放大缩小,高斯模糊等(当用了转换后你就不能使用.centerCrop()或.fitCenter()了。)
.priority(Priority.HIGH) 当前线程的优先级
.signature(new StringSignature(“ssss”))
.thumbnail(0.1f) 缩略图,3个重构方法:优先显示原始图片的百分比(10%)
.listener() 异常监听
.into() 图片加载完成后进行的处理:1,ImageView对象。2,宽高值。3,Target对象
Glide.with(context)
.load(url)
.into(imageView);
使用网络图片时,偶尔会出现图片加载慢或者加载不出来的情况。为了用户交互体验良好,我们通常会使用占位图用以标志加载状态。Glide 为我们提供了占位图方法 placeHolder() 以及加载失败的情况 error() :
Glide.with(context)
.load(url)
.placeholder(R.mipmap.default)
.error(R.mipmap.error)
.into(imageView);
.asBitmap()
方法,则 .load()
中的参数指向的可以是一个静态图片也可以是 GIF 图片,如果是一张 GIF 图片,则加载之后只会展示 GIF 图片的第一帧。.asGif()
方法,则 .load()
方法中的参数指向的必须是一个 GIF 图片。注意,如果指向一张静态图片那么该方法会产生错误。这两个方法中只能调用一个:
Glide.with(context)
.load(url) // 加载网络中的静态图片
.asBitmap() // 将图片固定成静态图片
.placeholder(R.mipmap.default)
.error(R.mipmap.error)
.into(imageView);
和占位图略有不同,占位图必须使用资源文件,而缩略图是动态的,可以从网络中加载。缩略图会在请求加载完成或者处理完之后才显示。
Glide 调用 thumbnail() 方法加载缩略图,参数是 float 类型,作为其倍数大小。例如,你传入 0.2f 作为参数,Glide 将会显示原始图片的 20% 的大小,如果原图是 1000x1000 的尺寸,那么缩略图将会是 200x200 的尺寸。
Glide.with(context)
.load(url)
.thumbnail(0.2f)
.into(imageView);
Glide 使用 .animate()
方法加载图片时展示的动画,可以是 Animator 类型的属性动画,也可以是 int 类型的动画资源。这个动画只在第一次加载的时候会展示,以后都会从缓存中获取图片,因此也就不会展示动画了。
Glide.with(context)
.load(url)
.animate(android.R.anim.slide_in_left) // 图片加载完成后的动画效果(从左侧滑入)
.into(imageView);
有时可能会有同时加载多个图片的情况。如果这个时候我们希望用户的体验更好,往往会选择先加载对于用户更加重要的图片。Glide 可以调用 .priority()
方法配合 Priority 枚举来设置图片加载的优先级。
//设置 HIGH 优先级
Glide.with(context)
.load(highPriorityImageUrl)
.priority(Priority.HIGH)
.into(imageView);
//设置 LOW 优先级
Glide.with(context)
.load(lowPriorityImageUrl)
.priority(Priority.LOW)
.into(imageView);
本次项目中基本只使用了 Glide 的基本功能,如果想使用 Glide 进行一些进阶操作,例如自定义图片的尺寸,范围,颜色,像素位置,可以参考此博客。