Gilde 3.7最全详解介绍和使用

本文详细介绍了Glide 3.7的使用方法,包括基础用法如生命周期绑定、占位图、缩略图、动画开关、图片大小与裁剪、缓存策略、优先级设置以及显示Gif和Video。此外,还探讨了进阶话题,如Target、Transformations、Animate和Modules的自定义。最后,提供了作者封装的Glide工具类GitHub地址,强调了框架封装的重要性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前言

  • 在这里主要是讲3.7的用法,4.0以上的请转换别的博客
  • 大部分现在主流用的最多的版本是3.70

介绍

  • Glide,是一种快速、高效的图像加载框架,提供了易用的API,高性能、可扩展的图片解码管道,以及自动的资源技术
  • Glide支持拉取,解码和展示视频快照,静态图片和动态图片,默认情况下,Gilde使用的是一个定制化的基宇HttpUrlConnection的栈,并且Google提供了和Volley、Okhttp快速集成的工具库,几乎满足一切需求

使用

(一)导入

  • 在AndroidStudio添加依赖
dependencies {  
   implementation 'com.android.support:appcompat-v7:26.1.0'
   compile 'com.github.bumptech.glide:glide:3.7.0'
}  
  • Maven形式
<dependency>
  <groupId>com.github.bumptech.glide</groupId>
  <artifactId>glide</artifactId>
  <version>3.7.0</version>
</dependency>
<dependency>
  <groupId>com.google.android</groupId>
  <artifactId>support-v4</artifactId>
  <version>r7</version>
</dependency>

(二)基础使用

1.基本用法

Gilde请求至少需要三个参数,代码如下:

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

with()生命周期跟Activity和Fragment保持一致,所以建议用她们的对象,而不是Context

2.占位图

有时候会因为网络差或者手机的问题,图片无法立即显示出来,为了让UI更加好看一些,我们会使用占位图,Glide为我们提供了placeHolder()和error()

Glide.with(context)
    .load(url)
    .placeholder(R.drawable.place_image)//图片加载出来前,显示的图片
    .error(R.drawable.error_image)//图片加载失败后,显示的图片
    .into(imageView)

注意: placeholder() 和 error() 的参数都是只支持 int 和 Drawable 类型的参数,这种设计应该是考虑到使用本地图片比网络图片更加合适做占位图。

3.缩略图

//这点有疑问

它可以从网络中加载,会在事件请求加载完成或者处理完之后显示,在原始图片到达之后,缩略图不会取代原始图片,只会被抹除

提供了两种加载方式,比较简单用thumbnail()方法,参数是float类型,为倍数,比如0.5f,Glide将显示原图片的50%大小

Glide.with( context )
    .load( url )
    .thumbnail( 0.5f )
    .into( imageView );

如果缩略图是通过网络加载相同的全尺寸图片,就不会很快显示,所以提供了另一种方式去加载略缩图

DrawableRequestBuilder<String> thumbnailRequest = Glide.with( context ).load( url );
Glide.with( context )
        .load( url )
        .thumbnail( thumbnailRequest )
        .into( imageView );

4.动画开关

动画效果可以让图片加载的更加平滑,crossFade()方法默认强制开启淡出淡入的效果,它有一个重载方法crossFade(int duration),可以控制动画的持续时间,默认是300ms,并且还提供了关闭效果的方法dontAnimate()

Glide.with(context)
    .load(url)
    .crossFade()//或者使用 dontAnimate() 关闭动画
    .placeholder(R.drawable.place_image)
    .error(R.drawable.error_image)
    .into(imageView);

注意: 可以自定义动画效果

5.图片大小与裁剪

可以指定图片大小,在图片显示到ImageView之前,重新改变,这是因为从服务器获取的图片不一定都是符合设计图的 标准

Glide.with(context)
    .load(url)
    .override(width,height)//这里的单位是px
    .into(imageView);

Glide提供了类似ScaleType属性,两个方法CenterCrop()、FitCenter(),CenterCrop() 方法是将图片按比例缩放到足矣填充 ImageView 的尺寸,但是图片可能会显示不完整;而 FitCenter() 则是图片缩放到小于等于 ImageView 的尺寸,这样图片是显示完整了,但是 ImageView 就可能不会填满了。

CENTER_CROP 和 FIT_CENTER

6.图片的缓存处理

  • 内存缓存
    .skipMemoryCache(true) 跳过内存缓存,默认有内存缓存
  • 磁盘缓存
//   跳过磁盘缓存
Glide.with(context)
    .load(url)
    .skipMemoryCache(true)
    .diskCacheStrategy( DiskCacheStrategy.NONE )
    .into(imageView);
  • 自定义磁盘缓存行为
    DiskCacheStrategy 的枚举意义:
    DiskCacheStrategy.NONE 什么都不缓存
    DiskCacheStrategy.SOURCE 只缓存全尺寸图
    DiskCacheStrategy.RESULT 只缓存最终的加载图
    DiskCacheStrategy.ALL 缓存所有版本图(默认行为)
  • 清理磁盘缓存
    // 必须在后台线程中调用,建议同时clearMemory()
    Glide.get(this).clearDiskCache();

7.图片请求的优先级

同一时间加载多个图片,如果APP主页有广告轮播和列表图片,希望广告轮播的图片优先显示,那么可以调用.priority()方法配合Priority枚举来设置图片加载的优先级

//设置 HIGH 优先级
Glide.with( context )
    .load( highPriorityImageUrl )
    .priority (Priority.HIGH )
    .into( imageView );
//设置 LOW 优先级
Glide.with( context )
    .load( lowPriorityImageUrl )
    .priority( Priority.LOW )
    .into( imageView );

Priority.LOW
Priority.NORMAL
Priority.HIGH
Priority.IMMEDIAT

优先级并不是遵守严格,会尽可能的去处理请求,不能保证所有的图片按照所有要求去顺序加载

8.显示 Gif 和 Video
设置Gif动态图片

Glide.with( context )
    .load( gifUrl )
    .asGif()
    .error( R.drawable.error )
    .into( imageView );

设置Gif图片第一帧静态图片

Glide.with( context )
    .load( gifUrl )
    .asBitmap()
    .error( R.drawable.error )
    .into( imageView );

设置视频但是只能是手机本地的视频

String filePath = "/storrage/emulated/0/Video/video.mp4";
Glide.with( context )
    .load( Uri.fromFile( new File( filePath ) ) )
    .into( imageView );

(三)进阶使用

Target篇

可以简单的理解为它是一个接口,Glide为我们提供了很多Target
  • SlimpleTarget

    最主要可以创建属于他们独立的生命周期,使用context.getApplicationContext() 的上下文,这样只有在应用完全停止时 Glide 才会杀死这个图片请求
    new SimpleTarget(500,500),可以指定尺寸大小,

private SimpleTarget<Bitmap> mSimpleTarget = new SimpleTarget<Bitmap>(500,500) {
    @Override
    public void onResourceReady(Bitmap resource, GlideAnimation<? super Bitmap> animation) {
        mImageView.setImageBitmap(resource);
    }
};

private void loadImageSimpleTarget() {
    Glide.with(context.getApplicationContext())
        .load(url)
        //防止加载到gif图片发生冲突
        .asBitmap()
        .into(mSimpleTarget);
}
  • ViewTarget
    自定义View时,Glide不支持加载图片到自定义Vie中,使用它会更容易实现

Transformations篇

图片显示之前对图片进行处理操作的功能 调用.transform()方法,将自定义的Transformations对象作为参数传递进去就可以使用了,还可以使用.

直接使用glide-transformations 图片处理库,它提供了很多Transformations的实现 .bitmaoTransform() 但是它只能用于 bitmap 的转换

Animate篇

  • 从图像到图像的平滑过渡可以更好的显示,我们如果想要设置自己的动画:
    //创建一个动画文件
    <set xmlns:android="http://schemas.android.com/apk/res/android"
    android:fillAfter="true">
    <scale
        android:duration="@android:integer/config_longAnimTime"
        android:fromXScale="0.1"
        android:fromYScale="0.1"
        android:pivotX="50%"
        android:pivotY="50%"
        android:toXScale="1"
        android:toYScale="1"/>
    </set>

    Glide.with(context)
    .load(mUrl)
    .transform(new RoundTransformation(this , 20))
    .animate( R.anim.donghua)
    .into(mImageView);
  • 这种加载方式在常规的ImageView上是没有问题,如果使用使用是后缀名Target类一些自定义的时候,需要传入ViewPropertyAnimation.Animator 接口的类对象来实现:
ViewPropertyAnimation.Animator animator = new ViewPropertyAnimation.Animator() {
    @Override
    public void animate(View view) {
        view.setAlpha( 0f );
        ObjectAnimator fadeAnim = ObjectAnimator.ofFloat( view, "alpha", 0f, 1f );
        fadeAnim.setDuration( 2500 );
        fadeAnim.start();
    }
};

然后,我们只需要在 Glide 请求中设置这个动画对象就ok了

Glide.with(context)
    .load(mUrl)
    .animate( animator )
    .into(viewTarget);

Modules篇

定制Gilde的行为,相当于自己可以随意改造变成自己需求的东西,为了定制 Glide 的行为我们要去实现 interface GlideModule

注意: 需要在Mainfast.xml注册 声明


总结

自己封装了一个工具类,这是github地址,要养成一个好习惯,把自己用过的框架自己封装一个工具类

Android图片框架Glide-3.7.0(最新,很强大),超好用的图片框架(包含jar源码) Glide 是一个高效、开源、 Android设备上的媒体管理框架,它遵循BSD、MIT以及Apache 2.0协议发布。Glide具有获取、解码展示视频剧照、图片、动画等功能,它还有灵活的API,这些API使开发者能够将Glide应用在几乎任何网络协议栈里。创建Glide的主要目的有两个,一个是实现平滑的图片列表滚动效果,另一个是支持远程图片的获取、大小调整展示。近日,Glide 3.0发布,现已提供 jar包下载 ,同时还支持使用Gradle以及Maven进行构建。该版本包括很多值得关注的新功能,如支持Gif 动画视频剧照解码、智能的暂停重新开始请求、支持缩略图等,具体新增功能如下如下: GIF 动画的解码 :通过调用Glide.with(context).load(“图片路径“)方法,GIF动画图片可以自动显示为动画效果。如果想有更多的控制,还可以使用Glide.with(context).load(“图片路径“).asBitmap()方法加载静态图片使用Glide.with(context).load(“图片路径“).asGif()方法加载动画图片 本地视频剧照的解码: 通过调用Glide.with(context).load(“图片路径“)方法,Glide能够支持Android设备中的所有视频剧照的加载展示 缩略图的支持: 为了减少在同一个view组件里同时加载多张图片的时间,可以调用Glide.with(context).load(“图片路径“).thumbnail(“缩略比例“).into(“view组件“)方法加载一个缩略图,还可以控制thumbnail()中的参数的大小,以控制显示不同比例大小的缩略图 Activity 生命周期的集成: 当Activity暂停重启时,Glide能够做到智能的暂停重新开始请求,并且当Android设备的连接状态变化时,所有失败的请求能够自动重新请求 转码的支持: Glide的toBytes() transcode() 两个方法可以用来获取、解码变换背景图片,并且transcode() 方法还能够改变图片的样式 动画的支持: 新增支持图片的淡入淡出动画效果(调用crossFade()方法)查看动画的属性的功能 OkHttp Volley 的支持: 默认选择HttpUrlConnection作为网络协议栈,还可以选择OkHttpVolley作为网络协议栈 其他功能: 如在图片加载过程中,使用Drawables对象作为占位符、图片请求的优化、图片的宽度高度可重新设定、缩略图原图的缓存等功能
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值