缩略图不同于前面文章中提到的占位图。占位图应当是跟app绑定在一起的资源。缩略图是一个动态的占位图,可以从网络加载。缩略图也会被先加载,直到实际图片请求加载完毕。如果因为某些原因,缩略图获得的时间晚于原始图片,它并不会替代原始图片,而是简单地被忽略掉。
提示:另外一个非常棒的平滑图片显示的方法是通过加载图片主色调的占位图。
简单的缩略图
Glide提供了两种不同的方法产生缩略图。第一种是通过在加载的时候指定一个小的分辨率,产生一个缩略图。这个方法在ListView和详细视图的组合中非常有用。如果你已经在ListView中用到了250x250像素的图片,那么在详细视图中会需要一个更大分辨率的图片。然而从用户的角度想:我们已经看见了一个小版本的图片,为什么需要好几秒,同样的图片(高分辨率的)才能被再次加载出来呢?
在这种情况下,从显示250x250像素版本的图片平滑过渡到详细视图里查看大图更有意义。Glide里的.thumbnail()方法让这个变为可能。这里,.thumbnal()的参数是一个浮点乘法运算:
1 | Glide |
如果你传递一个0.1f作为参数,Glide会加载原始图片大小的10%的图片。如果原始图片有1000x1000像素,缩略图的分辨率为100x100像素。由于图片将会比ImageView小,你需要确保缩放类型是否正确。
请注意你所有的请求设置都会影响到缩略图。例如,如果你使用了一个变换让你的图片变为灰度图,缩略图也同样将会是灰度图。
高级缩略图请求:原图与缩略图完全不同
为.thumbnail()传入一个浮点类型的参数,非常简单有效,但并不是总是有意义。如果缩略图需要从网络加载同样全分辨率图片,可能速度很慢。这样,Glide提供了另一个方法去加载和显示缩略图。
第二个方法是传递一个新的Glide请求作为参数,看看例子:
1 | private void loadImageThumbnailRequest() { |
区别在于第一个缩略图请求是完全独立于第二个原始请求的。缩略图可以来自不同资源或者图片URL,你可以在它上面应用不同的变换。
提示:你可以递归这样的操作,为你的缩略图添加额外的缩略图请求…
参考资料:
签到钱就到 Glide入门教程——9. 缩略图