Glide官网中文文档:
https://muyangmin.github.io/glide-docs-cn/
1:基本用法
多数情况下,使用Glide加载图片非常简单,一行代码足矣:
Glide.
with
(fragment) .
load
(myUrl) .
into
(imageView);
取消加载同样很简单:
Glide.
with
(fragment).
clear
(imageView);
尽管及时取消不必要的加载是很好的实践,但这并不是必须的操作。实际上,当
Glide.with()
中传入的 Activity 或 Fragment 实例销毁时,Glide 会自动取消加载并回收资源。
2:在 Application 模块中的使用
Application 模块中,可创建一个添加有
@GlideModule
注解,继承自
AppGlideModule
的类。此类可生成出一个流式 API,内联了多种选项,和集成库中自定义的选项:
package
com.
example
.
myapp
;
import
com.bumptech.glide.annotation.GlideModule
;
import
com.bumptech.glide.module.AppGlideModule
;
@GlideModule
public
final
class
MyAppGlideModule
extends
AppGlideModule {}
生成的 API 默认名为
GlideApp
,与
AppGlideModule
的子类包名相同。在 Application 模块中将
Glide.with()
替换为
GlideApp.with()
,即可使用该 API 去完成加载工作。
GlideApp.
with
(fragment) .
load
(myUrl) .
placeholder
(placeholder) .
fitCenter
() .
into
(imageView);
可以访问 Glide 的
generated API
页面来获得更多信息。
3:在 ListView 和 RecyclerView 中的使用
在 ListView 或 RecyclerView 中加载图片的代码和在单独的 View 中加载完全一样。Glide 已经自动处理了 View 的复用和请求的取消:
@Override
public
void
onBindViewHolder
(ViewHolder holder,
int
position) { String url = urls.
get
(position); Glide.
with
(fragment) .
load
(url) .
into
(holder.
imageView
);}
对 url 进行 null 检验并不是必须的,如果 url 为 null,Glide 会清空 View 的内容,或者显示
placeholder Drawable
或
fallback Drawable
的内容。
Glide 唯一的要求是,对于任何可复用的
View
或
Target
,如果它们在之前的位置上,用 Glide 进行过加载操作,那么在新的位置上要去执行一个新的加载操作,或调用
clear()
API 停止 Glide 的工作。
@Override
public
void
onBindViewHolder
(ViewHolder holder,
int
position) {
if
(isImagePosition(position)) { String url = urls.
get
(position); Glide.
with
(fragment) .
load
(url) .
into
(holder.
imageView
); }
else
{ Glide.
with
(fragment).
clear
(holder.
imageView
); holder.
imageView
.
setImageDrawable
(specialDrawable); }}
对
View
调用
clear()
或
into(View)
,表明在此之前的加载操作会被取消,并且在方法调用完成后,Glide 不会改变 view 的内容。如果你忘记调用
clear()
,而又没有开启新的加载操作,那么就会出现这种情况,你已经为一个 view 设置好了一个
Drawable
,但该 view 在之前的位置上使用 Glide 进行过加载图片的操作,Glide 加载完毕后可能会将这个 view 改回成原来的内容。
这里的代码以 RecyclerView 的使用为例,但规则同样适用于 ListView。
4:占位符
4-1)
占位符(Placeholder)
占位符是当请求正在执行时被展示的 Drawable 。当请求成功完成时,占位符会被请求到的资源替换。如果被请求的资源是从内存中加载出来的,那么占位符可能根本不会被显示。如果请求失败并且没有设置
error Drawable
,则占位符将被持续展示。类似地,如果请求的url/model为
null
,并且
error Drawable
和
fallback
都没有设置,那么占位符也会继续显示。
使用
generated API
:
GlideApp.
with
(fragment) .
load
(url) .
placeholder
(R.
drawable
.
placeholder
) .
into
(view);
Or:
GlideApp.
with
(fragment) .
load
(url) .
placeholder
(
new
ColorDrawable(Color.
BLACK
)) .
into
(view);
4-2)
错误符(Error)
rror Drawable
在请求永久性失败时展示。
error Drawable
同样也在请求的url/model为
null
,且并没有设置
fallback Drawable
时展示。
With the
generated API
:
GlideApp.
with
(fragment) .
load
(url) .
error
(R.
drawable
.
error
) .
into
(view);
Or:
GlideApp.
with
(fragment) .
load
(url) .
error
(
new
ColorDrawable(Color.
RED
)) .
into
(view);
4-3
后备回调符(Fallback)
fallback Drawable
在请求的url/model为
null
时展示。设计
fallback Drawable
的主要目的是允许用户指示
null
是否为可接受的正常情况。例如,一个
null
的个人资料 url 可能暗示这个用户没有设置头像,因此应该使用默认头像。然而,
null
也可能表明这个元数据根本就是不合法的,或者取不到。 默认情况下Glide将
null
作为错误处理,所以可以接受
null
的应用应当显式地设置一个
fallback Drawable
。
使用
generated API
:
GlideApp.
with
(fragment) .
load
(url) .
fallback
(R.
drawable
.
fallback
) .
into
(view);
Or:
GlideApp.
with
(fragment) .
load
(url) .
fallback
(
new
ColorDrawable(Color.
GREY
)) .
into
(view);