#Glide 概述
Glide,就像 Picasso,可以从多个源去加载和显示图片,同时也兼顾缓存和在做图片处理的时候维持一个低内存消耗。它已经在 Google 官方 APP (如 Google 2015开发者大会的应用程序)中使用了,就和 Picasso 一样受欢迎。在这个系列中,我们要探讨 Glide 和 Picasso 的不同和优势。
Glide建造者要求最少有三个参数
• With(Context context) ,很多AndroidAPI调用,Context是必须的。
• Load(String imageUrl),这个ImageUrl就是我们要传的图片地址,网络URL。
• Into(ImageView imageView),这个就是我们想把URL 加载到哪个ImageView中。
#配置Gradle
dependencies {
compile 'com.github.bumptech.glide:glide:3.7.0'
}
复制代码
上面只是简单的概述一波
Glide可以加载一下几种类型的图片资源:
- 加载网络地址资源
Glide.with(this)
.load("http://i.imgur.com/DvpvklR.png")
.fitCenter()
.into(iv_1);
复制代码
- 加载drawable资源
Glide.with(this)
.load(R.drawable.ic_launcher)
.placeholder(R.mipmap.ic_launcher_round)
.error(R.mipmap.ic_launcher_round)
.into(iv_2);
复制代码
- 从Uri加载资源
Uri uri = Uri.parse("android.resource://" + getPackageName() + "/" + R.drawable.ic_launcher);
tv_title3.setText("从 Uri 中加载");
Glide.with(this)
.load(uri)
.placeholder(R.drawable.ic_launcher)
.error(R.mipmap.ic_launcher_round)
.dontAnimate() //加载没有任何动画
.into(iv_3);
复制代码
- 从文件File加载资源
//这个文件可能不存在于你的设备中。然而你可以用任何文件路径,去指定一个图片路径。
File file = new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES), "S61215-011806.jpg");
tv_title4.setText("从文件中加载");
Glide.with(this)
.load(file)
.into(iv_4);
复制代码
- 还可以加载webp图片资源
当然前面只是讲了皮毛而已,Glide很强大。我们继续了解其它属性。
1. 占位符 placeholder
该属性,在图片资源未加载完成时,占位符会在Imageview里显示
Glide.with(this)
.load("http://i.imgur.com/DvpvklR.png")
.placeholder(R.drawable.ic_launcher)
.into(iv_1);
复制代码
直接上图,看加载网络地址资源图
2. 错误占位符error
该属性,在图片资源加载失败时,占位符会在Imageview里显示
还有一个就是,错误占位符,error()接受的参数只能是已经初始化的 drawable 对象或者指明它的资源(R.drawable.)。
Glide.with(this)
.load("http://i.imgur.com/DvpvklR.png")
.error(R.mipmap.ic_launcher_round)
.into(iv_1);
复制代码
直接上图,看加载网络地址资源图
我们可以看到在没网的情况下,我们的异常占位符显示了出来。
反之把网络图片资源加载出来
3. 图片淡入动画属性crossFade()
这里要说的是动态图我就不添加了,可以看上面的图
Glide.with(this)
.load("http://i.imgur.com/DvpvklR.png")
.crossFade()
.into(iv_1)
复制代码
- 根据该源码,我们可以看出crossfade()方法我们可以传参 。crossFade(int duration)。如果你想要去减慢(或加快)动画,随时可以传一个毫秒的时间给这个方法。动画默认的持续时间是 300毫秒。
4. dontAnimate()
这个方法就是直接显示图片,没有淡入淡出效果
Glide.with(this)
.load("http://i.imgur.com/DvpvklR.png")
.dontAnimate()
.into(iv_1)
复制代码
**5. 图像设置大小 override(horizontalSize, verticalSize) **
Glide 有更加高效的内存管理。Glide 自动限制了图片的尺寸在缓存和内存中,并给到 ImageView 需要的尺寸。对于 Glide,如果图片不会自动适配到 ImageView,调用 override(horizontalSize, verticalSize) 。这将在图片显示到 ImageView之前重新改变图片大小。
Glide.with(this)
.load("http://i.imgur.com/DvpvklR.png")
.override(500, 300)
.into(iv_1)
复制代码
当你还没有目标 view 去知道尺寸的时候,这个选项也可能是有用的。比如,如果 App 想要在闪屏界面预热缓存,它还不能测量 ImageView 的尺寸。然而,如果你知道这个图片多少大,用 override 去提供明确的尺寸。
6.缩放图像centerCrop()
CenterCrop()是一个裁剪技术,即缩放图像让它填充到 ImageView 界限内并且裁剪额外的部分。ImageView 可能会完全填充,但图像可能不会完整显示。
Glide.with(this)
.load("http://i.imgur.com/DvpvklR.png")
.override(500, 300)
.centerCrop()
.into(iv_1)
复制代码
7.缩放图像fitCenter()
fitCenter() 是裁剪技术,即缩放图像让图像都测量出来等于或小于 ImageView 的边界范围。该图像将会完全显示,但可能不会填满整个 ImageView。
Glide.with(this)
.load("http://i.imgur.com/DvpvklR.png")
.override(500, 300)
.fitCenter()
.into(iv_1)
复制代码
8.同时可以加载Gif图像
这里只要是一个GIF图片链接就OK了!
Glide.with(this)
.load("http://2f.zol-img.com.cn/product/104_1200x900/305/cevDJaCdeLQ6.gif")
.override(800, 300)
.into(iv_2);
复制代码
在开发过程中图片链接是常规图片。那么我们就需要检测是否是动态图,可以看下面代码
**asGif()**该属性可以强制把图片转成GIF类型。
Glide.with(this)
.load("http://2f.zol-img.com.cn/product/104_1200x900/305/cevDJaCdeLQ6.gif")
.asGif()
.into(iv_2);
复制代码
开发过程中,有些GIF图太大。导致OOM异常,asBitmap()直接把GIF图,转成常规图片(把GIF图片的第一帧当作常规图显示)
Glide.with(this)
.load("http://2f.zol-img.com.cn/product/104_1200x900/305/cevDJaCdeLQ6.gif")
.asBitmap()
.into(iv_2);
复制代码
9.显示本地视频
String filePath = "/Video/test_video.mp4";
Glide
.with( context )
.load( Uri.fromFile( new File( filePath ) ) )
.into( imageViewGifAsBitmap );
复制代码
这里要说的是,只支持本地视频。网络视频URL 是不会工作的。