之前我的文章中有说到Glide的一般使用方法,以及我自己的一些封装。这里我对Glide的用法做一个较为完整的总结。
首先我们要说一下Glide的简单用法。
Glide.with(this)
.load("url")
.into(imageview);
简单用法是非常简单的,就是将一个url加载到指定的图片控件中就好了 。所以我们再看一下完整的Glide用法
Glide.with(this)
.load("url")
.placeholder(R.drawable.ic_launcher_background)
.error(R.drawable.ic_launcher_background)
.override(50,50)
.fitCenter()
.centerCrop()
.skipMemoryCache(true)
.diskCacheStrategy(DiskCacheStrategy.NONE)
.priority(Priority.HIGH)
.into(imageview);
- with方法。with方法就是用来创建一个加载图片的实例。with方法可以接收Context的参数,这个Context参数类型有Activity或Fragment都可以。也就是说我们选择使用Glide的场景和范围非常广。不管是在Activity当中还是在Fragment当中都可以去调用with方法。如果当前场景不是Activity或Fragment,也可以调用Application的Context。with传入的上下文决定了图片加载的生命周期,也就是说,如果传入Fragment,它的生命周期跟随Fragment。当Fragment销毁时图片加载也会停止。如果是Application的上下文,则会跟随整个APP的生命周期。
- load方法。load方法用于指定待加载的图片资源。在Glide当中支持非常多图片资源的形式。包括网络图片,本地图片,应用资源,甚至二进制流,URI对象都可以。所以说load方法它有很多重载方法。用于加载不同来源的图片。
- placeholder方法。当我们图片加载慢的时候,一般要显示一张占位图,直到加载的网络图片处理完成。glide使用流式接口加载图片,所以我们在placeholder方法中传入一张资源图,就可以让图片加载过程中显示该图片作为占位图。要注意一点,我们不能设置一个url作为占位图。
- error方法。异常占位图。因为异常情况导致图片加载失败。比如手机网络非常不好的时候,这时就会在失败后展示异常占位图。
- override方法。平时我们在使用图片框架或加载图片时,其实很容易碰到一个问题,容易造成内存浪费。什么是内存浪费?比如说一张图片的尺寸是1200x1200像素,那么我们界面上的ImageView它有可能不能存放这么大一个像素的图片。它有可能只能展示300x300的像素。那么这时候如果你不对图片进行任何的压缩,你就直接将1200x1200的像素直接存放到内存当中,这就属于一种内存浪费。其实我们的app根本用不到这么高清的图片,因为我们手机的容量有限,它所展示的位置有限。同时在日常开发过程中,一些运营给我们的图片其实它有个周期。同时图片展示的位置它也是十分有讲究的。所以说你根本没必要这么高清。Glide可以自动限制图片尺寸,然后保存在手机内存当中。调用override方法可以手动地设置imageview需要的尺寸。
- fitCenter方法。任何图像调整大小都能让长宽变化,让图像失真。失真时会丑化我们的图像显示。在大多数场景下我们要避免发生这种情况。这个fitCenter就是其中之一。它是一个裁剪技术,它的主要作用就是将我们的图像进行缩放,然后让图像测量出来的宽高都小于ImageView的边界范围。所以这个图像会完全显示,但它有可能不会填满我们整个ImageView。
- centerCrop方法。另外一种裁剪技术,它会缩放图像,让其填充到ImageView的界限内部,它会裁剪超出ImageView边界的图像其他部分。此时ImageView会完全填充,但其中的图像有可能不会完整地显示出来。这几项是glide对图片内存的优化和显示裁剪的优化。
- skipMemoryCache(true)方法。告诉glide跳过内存缓存或不跳过内存缓存。这里传入true的话,就表示它不会把图片放到内存缓存当中去。这里需要明白的是,调用skipMemoryCache,它只会影响内存缓存。而glide仍然会使用磁盘缓存来避免重复的网络请求。这里还需要注意的一点是,由于glide它会默认将所有的图片资源,都放到内存缓存当中去,所以说你不会直接调用skipMemoryCache然后传入个false,这是没有必要的,因为glide默认会把图片保存到内存缓存当中去。还有一点注意,如果两次传入相同的url,如果第一个图片请求没有调用skipMemoryCache传入true的话,那么后来再调用这个方法,那么这个资源将会在内存中去获取。所以同一个资源要保证调用方法的一致性。
- diskCacheStrategy(DiskCacheStrategy.NONE)方法。它是我们的硬盘缓存策略。如果通过上面的方法关闭了内存缓存,那么图片请求它仍然会被存储到设备的磁盘缓存当中。如果有一张图片拥有相同的url,但是它的变化很快,这时想把磁盘缓存一起禁用了,这时可以调用这个diskCacheStrategy方法,然后传入一个None,这样就可以改变磁盘缓存行为。不同于skipMemoryCache方法的是,这里的diskCacheStrategy方法传入的是一个枚举值,而不是简单的布尔类型。我们看一下它的几个枚举类型值。
枚举类型 | 说明 |
DiskCacheStrategy.NONE | 表示什么都不缓存 |
DiskCacheStrategy.ALL | 表示它会缓存所有对象,同时它也是个默认行为 |
DiskCacheStrategy.SOURCE | 此时仅仅只缓存原来的全分辨率的图像 |
DiskCacheStrategy.RESULT | 它只缓存最终的图像,即降低分辨率后的图像,就是我们转换后的图片。 |
- priority方法。如果需要在同一时间内加载多个图像,但我们需要设置某个图片优先于其他图片加载,如中央的运营大图,就用到了该方法。设置优先级,Glide就会将它们作为一个准则,但是它只是尽可能的处理这些情况,不能保证所有图片都是按照你所需要的顺序加载。
- into方法。设置显示图片的ImageView。Into这个方法不只能接收ImageView这个参数,还可以接收其他类型的参数。