介绍
Glide[glaɪd]
是一个快速高效的 Android
图片加载库,注重于平滑的滚动。支持拉取,解码和展示视频快照,图片,GIF
动画。默认情况下,Glide
使用的是一个定制化的基于 HttpUrlConnection
的栈,但同时也提供了与 Google Volley
和 Square OkHttp
快速集成的工具库
特性
- 图片大小
Glide
根据Imageview
的宽高,下载对应大小的图片并本地保存,而不是直接下载原始大小的图片。同一张图片,当Imageview
宽高改变时,Glide
会重新下载 - 存储位置
下载图片存储位置:/data/data/包名/cache/image_manager_disk_cache
依赖
1 | dependencies { |
基本概念
标准用法
Glide
使用简明的流式语法 API
,最常用的方法:
1 | Glide.with(fragment) // context 自动管理生命周期 |
with(context)
中的context
尽量直接使用Activity
和Fragment
,而不是Application
的Context
,因为Glide
会维护生命周期,在Acitivity/Fragment
销毁时自动取消加载并释放资源
裁剪和填充
ImageView
大小和图片原始大小:
- centerCrop
按照图片中心位置放大,填充满整个ImageView
,如果多出的部分裁剪掉
- fitCenter
按比例将图片完整显示,尺寸不足部分留白
和 ImageView
的 scaletype
对应关系如下,查看源码:
1 | // GenericRequestBuilder::into |
其他默认为使用 ImageView
设置的属性
ImageView
固定宽度,高度自适应图像完全显示,在Glide
中的解决方案
同时指定adjustViewBounds
和fitXY
:
1 | <ImageView |
其实这就是 ImageView
标准用法,网上查看教程提到在 Glide
中不生效,实测 Glide 3.8
版本是可以生效的
占位符 placeholder
placeholder
:当图片还没有加载成功时,避免布局抖动或者为空,先显示该占位符的图片,用法:
1 | Glide.with(fragment) |
常见使用流程
- 添加依赖
- 初始化
ImageView
并准备资源图 - 在
Fragment/Activity
的主线程中使用
1 | Glide.with(fragment) |
就这么简单!其他复杂使用方法,可以参考官方教程
常见问题
RecyclerView
设置宽度填充满屏幕,高度自适应,遇到的问题
- 问题描述
- 第一次加载时,
Glide
加载的图片没有达到要求,图片变小了 - 上下滑动,
RecyclerView
在复用imageview
时,因为尺寸问题,会导致正常显示的图片,因为复用导致imageview
大小发生变化,从而Glide
重新下载了一张错误尺寸的图片
- 解决方案:
ImageView
的xml
配置文件中增加:
1 | android:adjustViewBounds="true" |
- 原因:
fitXY
:这种图片的显示方式的效果是:根据ImageView
设置的大小拉伸图片以填充满空间,(单独设置此属性时)图片会变形adjustViewBounds
:是限制图片在显示时保持原图比例,和fitXY
显示方式合用能到达自适应的效果