Glide使用总结
glide的三步使用
首先使用之前需要将这个库引入到我们的项目中
dependencies {
compile 'com.github.bumptech.glide:glide:3.7.0'
}
加载图片
Glide.with(this).load(url).into(imageView);
就是这一行代码,就是with(),load(),into()这三步完成了一个图片的加载,即可以加载静态图片还可以加载动态图片
下边分析一下Glide是如何在这三步中加载一个图片的
首先,Glide.with(this)方法用于创建一个加载图片的实例,可以传入的参数看下图:
图中可以看到我们可以传入的有context,activity和fragment。但是我们传入的实例决定着加载图片的生命周期。所以需要慎重选择。
再来看load(),传入我们需要加载的图片资源。具体还是看图
图中可以看到load有很多个重载方法。这也体现出它加载图片的全面性。可以是uri,本地图片,二进制流,网络图片,应用资源等。
// 加载Uri对象
Uri imageUri = getImageUri();
Glide.with(this).load(imageUri).into(imageView);
// 加载本地图片
File file = new File(getExternalCacheDir() + "/image.jpg");
Glide.with(this).load(file).into(imageView);
// 加载二进制流
byte[] image = getImageBytes();
Glide.with(this).load(image).into(imageView);
// 加载网络图片
String url = "";
Glide.with(this).load(url).into(imageView);
// 加载应用资源
int resource = R.drawable.image;
Glide.with(this).load(resource).into(imageView);
最后就是into()了,这个很简单,我们需要将图片显示在那个控件上,将这个实例传进去就可以了。
以上简单的三步已经可以简单的使用glide加载图片了。但是仅仅以上在实际工作中是不能够满足要求的。比如说我们在加载网络图片的时候是需要时间的,而在加载的这段时间图片的位置是空白的抬不美观,或者说因为网络或其他原因导致加载失败的时候,仍然是空白都很不美观。所以我们就需要占位图来解决这个问题。
占位图
占位图就是在加载的时候先显示一张临时的图片,等图片加载出来之后再替换掉。这样做在用户体验上会好很多。Glide已经给我们封装好了api,我们直接用就好
Glide.with(this)
.load(url)
.placeholder(R.mipmap.default)
.into(imageView);
就这么简单,就只是在load()和into()之间添加了一个placeholder()而已。同样,加载失败我们也需要一张加载失败的占位图,也是glide封装好的api,直接上代码
Glide.with(this)
.load(url)
.placeholder(R.mipmap.default)
.error(R.mipmap.error)
.into(imageView);
以上两种情况的占位图都有了,但是你会发现,只有第一次加载的时候才能看到placeholder()的占位图,之后基本上都看不到。这就涉及到了Glide的缓存问题,Glide的缓存机制很强大,第一次加载的时候已经将图片缓存下来了,下次加载的时候就直接在缓存中取,所以加载速度特别快。
Glide加载指定格式的图片
开始的时候就说了,Glide还可以加载gif图。什么额外的代码都不需要添加,Glide内部会自动判断,如果是gif图,显示出来的就是gif图。但有时候我们只想要静态图,那我们也可以自己指定图片格式。代码同样很简单:
Glide.with(this)
.load(url)
.asBitmap()
.placeholder(R.mipmap.default)
.error(R.mipmap.error)
.into(imageView);
仅仅加了一个asBitmap()方法,这个意思就是说只允许加载静态图片,即便我们传入的url是一张gif图,也只会显示第一帧。
同理,既然可以设置只加载静态图片,肯定也能设置只加载gif图。代码如下:
Glide.with(this)
.load(url)
.asGif()
.placeholder(R.mipmap.default)
.error(R.mipmap.error)
.into(imageView);
但需要主要的是,如果我们传入的是一个静态图片,就会加载失败。
Glide加载时指定图片大小
实际开发中,我们基本上不会用到的。因为Glide在加载图片的时候不会直接将完整的图片缓存到内存中,他会根据imageview的大小来加载图片,这也是为什么不会用到的原因。Glide是不是很智能呢?!
但是尽管不会用到,还是介绍下指定大小的方式
Glide.with(this)
.load(url)
.asGif()
.placeholder(R.mipmap.default)
.error(R.mipmap.error)
.override(100,100)
.into(imageView);
是不是也很简单。指定一个尺寸之后,Glide不会去计算imageView的大小有多大,只会加载指定大小的图片。