Android-Glide

Glide(图片加载库)

官方网址:https://github.com/bumptech/glide

关于 Glide

Glide是一个快速高效的Android图片加载库,注重于平滑的滚动。Glide提供了易用的API,高性能、可扩展的图片解码管道(decode pipeline),以及自动的资源池技术。

Glide 支持拉取,解码和展示视频快照,图片,和GIF动画。Glide的Api是如此的灵活,开发者甚至可以插入和替换成自己喜爱的任何网络栈。默认情况下,Glide使用的是一个定制化的基于HttpUrlConnection的栈,但同时也提供了与Google Volley和Square OkHttp快速集成的工具库。

虽然Glide 的主要目标是让任何形式的图片列表的滚动尽可能地变得更快、更平滑,但实际上,Glide几乎能满足你对远程图片的拉取/缩放/显示的一切需求。

API

Glide 使用简明的流式语法API,这是一个非常棒的设计,因为它允许你在大部分情况下一行代码搞定需求:

Glide.with(fragment)
    .load(url)
    .into(imageView);

性能

Glide 充分考虑了Android图片加载性能的两个关键方面:

  • 图片解码速度
  • 解码图片带来的资源压力

为了让用户拥有良好的App使用体验,图片不仅要快速加载,而且还不能因为过多的主线程I/O或频繁的垃圾回收导致页面的闪烁和抖动现象。

Glide使用了多个步骤来确保在Android上加载图片尽可能的快速和平滑:

  • 自动、智能地下采样(downsampling)和缓存(caching),以最小化存储开销和解码次数;
  • 积极的资源重用,例如字节数组和Bitmap,以最小化昂贵的垃圾回收和堆碎片影响;
  • 深度的生命周期集成,以确保仅优先处理活跃的Fragment和Activity的请求,并有利于应用在必要时释放资源以避免在后台时被杀掉。

配置要求

Glide v4最低支持Android Ice Cream Sandwich (API level 14).

基础使用

添加依赖包

dependencies {
  implementation 'com.github.bumptech.glide:glide:4.11.0'
  annotationProcessor 'com.github.bumptech.glide:compiler:4.11.0'    //Glide注解处理器的依赖
}

基础使用

Glide.with(fragment)     //上下文 View Fragmen都可以,与其生命周期进行绑定了。
    .load(url)        //图片资源 资源ID 远程图片url等
    .into(imageView);    //ImageView      

占位图

1.placeholder  正在请求图片的时候展示的图片

2.error      如果请求失败的时候展示的图片(如果没有设置,还是展示placeholder占位符)

3.fallback      如果请求的url/model为null的时候展示的图片(如果没有设置,还是展示placeholder占位符)

复制代码
        RequestOptions requestOptions = new RequestOptions()
                .placeholder(Drawable)
                .error(Drawable)
                .fallback(Drawable)
                .override(width,height);
        Glide.with(fragment)
                .load(url)
                .apply(requestOptions)
                .into(imageView);
复制代码

过度动画

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

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

        // 交叉淡入的方式显示占位符,避免占位符还能显示。
        DrawableCrossFadeFactory factory = new DrawableCrossFadeFactory.Builder().setCrossFadeEnabled(true).build();

        Glide.with(this)
                .load(testUrl)
                .apply(requestOptions)
                .transition(DrawableTransitionOptions.withCrossFade(factory))
                .into(glideImage);    

变换

CircleCrop          圆角

RoundedCorner       四个角度统一指定

GranularRoundedCorners    四个角度单独指定

Rotate            旋转

        Glide.with(this)
                .load(testUrl)
                .apply(requestOptions)
                .transition(DrawableTransitionOptions.withCrossFade(factory))
                .transform(new CircleCrop())
                .into(glideImage);

Generated API

1.添加Glide 注解处理的依赖。

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

@GlideModule
public final class MyGlideAppModule extends AppGlideModule { }

配置完了类后可以对项目进行编译完了后,可以更便捷的来使用流试的api来配置这些占位符。

        GlideApp.with(this)
                .load(testUrl)
                .placeholder(R.drawable.ic_launcher_background)
                .error(R.drawable.ic_launcher_foreground)
                .fallback(R.drawable.ic_launcher_background)
                .override(100, 100)
                .into(glideImage);

 

GlideExtension与GlideOption(扩展与配置选项)

当需要大量图片处理时可以达到更加简便。

复制代码
@GlideExtension
public class MyGlideAppExtension {

   private MyGlideAppExtension() {
   }

   @GlideOption
   public static BaseRequestOptions<?> defaultImg(BaseRequestOptions<?> options){
      return options
              .placeholder(R.drawable.ic_launcher_background)
              .error(R.drawable.ic_launcher_foreground)
              .fallback(R.drawable.ic_launcher_background)
              .transform(new CircleCrop());
   }
}
复制代码
GlideApp.with(this).load(testUrl).defaultImg().into(glideImage);

 

posted @   Shuranima  阅读(262)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具
点击右上角即可分享
微信分享提示