当前位置: 首页 > 工具软件 > glide-docs-cn > 使用案例 >

Android基础学习(十四)—— Glide

林君博
2023-12-01

Glide:快速高效的Android图片加载库,可以自动加载网络、本地文件、app资源中的图片,注重于平滑的滚动

一、Glide基本使用

开源地址:https://github.com/bumptech/glide

中文文档:https://muyangmin.github.io/glide-docs-cn/

模块的build.gradle中引入Glide:

implementation 'com.github.bumptech.glide:glide:4.11.0'
annotationProcessor 'com.github.bumptech.glide:compiler:4.11.0'

1、基本使用:

Glide.with([fragment/Context/View])
    .load(url)
    .into(imageView);

1)Glide.with中参数是哪个环境变量对象,说明它会和哪个环境变量的生命周期绑定到一起。

Glide的使用大量减少了因为图片导致的OOM的可能。

2)url 可以是一个R.** 的图片资源id,也可以是https.*, 也可以是文件对象

如果是https,则需在AndroidManifest.xml中申请网络权限;如果是文件对象,则需在AndroidManifest.xml中申请存储卡读写权限。

3)into方法将图片传递给指定的ImageView

2、Glide占位符

Glide4中占位图的使用方法,包括(placeholder、error、fallback)三种占位图:

  • placeholder:正在请求图片的时候展示的图片
  • error:如果请求失败的时候展示的图片(如果没有设置,还是展示placeholder的占位符)
  • fallback:如果请求的url/model为 null 的时候展示的图片(如果没有设置,还是展示placeholder的占位符)
RequestOptions requestOptions = new RequestOptions()
    .placeholder(R.drawable.hold)
    .error(R.drawable.error)
    .fallback(R.drawable.fallback)
    .override(100, 100);  //override指定加载图片大小,可不设置

Glide.with([fragment/Context/View])
    .load(url)
    .apply(requestOptions)
    .into(imageView);

二、Glide进阶

1、过渡动画

定义Glide如何从占位符到新加载的图片,或从缩略图到全尺寸图像过渡

交叉淡入(避免占位图还能显示):

RequestOptions requestOptions = new RequestOptions()
    .placeholder(R.drawable.hold)
    .error(R.drawable.error)
    .fallback(R.drawable.fallback)
    .override(100, 100);  //override指定加载图片大小,可不设置

DrawableCrossFadeFactory factory = new DrawableCrossFadeFactory.Builder().setCrossFadeEnabled(true).build();

Glide.with(context)
    .load(URL)
    .apply(requestOptions)
    .transaction(DrawableTransitionOptions.withCrossFade(factory))  //过渡
    .into((ImageView)holder.itemView);

注意,除了DrawableTransitionOptions之外,还有BitmapTransitionOptions

Glide.with(context).asBitmap()
    .load(URL)
    .apply(requestOptions)
    .transaction(BitmapTransitionOptions.withCrossFade(factory))  //过渡
    .into((ImageView)holder.itemView);

为了提升性能,避免在ListView、GridView 或 RecyclerView 加载图片时使用Glide过渡动画

2、变换

获取资源并修改它,然后返回被修改后的资源。通常变换操作是用来完成剪裁 或 对位图应用过滤器。比如对图片进行圆角配置。

Glide.with(this)
    .load(URL)
    .transform(new CircleCrop())  //变换
    .into(imageView);
  • CircleCrop:圆角
  • RoundedCorners:四个角度统一指定
  • GranularRoundedCorners:四个角度单独指定
  • Rotate:旋转

3、Generated API

1)添加Glide注解处理器的依赖

dependencies{
	annotationProcessor 'com.github.bumptech.glide:compiler:4.11.0'
}

可以帮助我们自动生成一个更加简单的Glide对象

2)在 Application 模块中包含一个 AppGlideModule 的实现:

@GlideModule
public final class MyAppGlideModule extends AppGlideModule{} //空函数即可

好处:可以更加简单地完成占位符等配置

之前:

RequestOptions requestOptions = new RequestOptions()
    .placeholder(R.drawable.hold)
    .error(R.drawable.error)
    .fallback(R.drawable.fallback)
    .override(100, 100);  //override指定加载图片大小,可不设置

DrawableCrossFadeFactory factory = new DrawableCrossFadeFactory.Builder().setCrossFadeEnabled(true).build();

Glide.with(Context)
    .load(URL)
    .apply(requestOptions)
    .transaction(DrawableTransitionOptions.withCrossFade(factory))  //过渡
    .into((ImageView)holder.itemView);

之后:

GlideApp.with(Context).load(URL).placeholder(R.drawable.hold)

注意,不同之处在于不用再创建 RequestOptions 对象了,使得占位符的使用更为简单。

GlideExtension与GlideOption组合

定义一个在频繁使用的选项集合

@GlideExtension
public class MyAppExtension{
    
    private MyAppExtension(){} //这个类需要有一个私有无参构造方法
    
    @GlideOption
    public static BaseRequestOptions<?> defaultImg(BaseRequestOptions<?> options){
        return options
            .placeholder(R.drawable.hold)
            .error(R.drawable.error)
            .fallback(R.drawable.fallback);
    }
}

使用对比:

GlideApp.with().load()
    .placeholder(R.drawable.hold)
    .error(R.drawable.error)
    .fallback(R.drawable.fallback);
GlideApp.with().load()
    .defaultImg()
 类似资料: