写在前面:这篇文章原著是Norman Peitek,所有著作权归原作者所有,我只是在学习Glide的时候看到有间书的作者 weiyf 写了双语的翻译,觉得非常好,但是作者只写了几篇,估计是比较忙吧。于是我就去看原博了,发现原博的英文也不会很难懂,这里只是方便学习做了翻译(顺便学英语(逃),建议英文基础还可以的同学直接看原文:https://futurestud.io/tutorials/glide-image-resizing-scaling
前几篇传送门:
- 【双语】Glide — 入门(Glide — Getting Started)
- 【双语】Glide — 高级加载(Glide — Advanced Loading)
- 【双语】Glide — 列表适配器(ListView, GridView)(Glide — ListAdapter (ListView, GridView))
- Glide-Placeholders & Fade Animations(默认图与过渡动画)
原文传送门:
- Displaying Gifs & Videos
- Caching Basics
- Request Priorities
- Thumbnails
- Callbacks: SimpleTarget and ViewTarget for Custom View Classes
- Loading Images into Notifications and AppWidgets
- Exceptions: Debugging and Error Handling
- Custom Transformations
- Custom Animations with animate()
- Integrating Networking Stacks
- Customize Glide with Modules
- Glide Module Example: Accepting Self-Signed HTTPS Certificates
- Glide Module Example: Customize Caching
- Glide Module Example: Optimizing By Loading Images In Custom Sizes
- Dynamically Use Model Loaders
- How to Rotate Images
- Series Roundup
- *Advanced ListViews With Images
- *App Release Preparation
- How to Choose the Best Caching Preference
- How to Ignore URL Query Parameters In Cache Lookup (soon)
- Network-Dependent Image Loading (soon)
正文:
在上一篇博文里,你学习了如何从不同的源加载图片并且设置不同的占位符。如果你还不会在加载的时候调整和裁剪图片,那么本周的博文就很重要啦!
用resize(x,y)设置图片大小
通常来说,如果你的服务器或者API能为你提供你需要的尺寸的图片,那么是最好的。因为这需要在带宽、内存消耗、图片质量之前做一个平衡。
与Picasso相比,Glide在内存消耗上更高效、更智能。Glide会根据所剩的内存和ImageView的大小自动限制图片的尺寸。Picasso也有相似的特性,但是它需要手动调用.fit(),对于Glide而言,如果某些图片不应该被自动调整,那么执行override(horizontalSize, verticalSize),那么这个图片会在显示到ImageView之前被调整为需要的尺寸。
Glide
.with(context)
.load(UsageExampleListViewAdapter.eatFoodyImages[0])
.override(600, 200) //按照这个像素,调整图片的尺寸,不保持长宽比例
.into(imageViewResize);
这对于某些情况是挺实用的:当你要加载图片到未知尺寸的View上时;比如,如果app想要在启动页面加载缓存(原文:if the app wants to warm up the cache in the splash screen( warm up the cache不知道啥意思(逃),此时还不能测量ImageView的尺寸。然而,如果你已经知道图片需要多大的尺寸,那么使用override可以得到特定大小的图片。
图片裁剪
现在,因为任何对图片的处理、调整都会导致图片的比例扭曲从而图片看起来很丑。在大部分应用场景下,你都希望避免这种情况的发生。Glide提供了一些常用的变换来改变图片的显示。它附带了两个基本选项: centerCrop和fitCenter。
CenterCrop
CenterCrop()
是一种“去除多余”的裁剪方式,它会把ImageView边界以外的部分裁剪掉。这样一来ImageView会被填充满,但是这张图片可能不会完整地显示出来(ps:因为超出部分都被裁剪掉了)。
Glide
.with(context)
.load(UsageExampleListViewAdapter.eatFoodyImages[0])
.override(600, 200) // resizes the image to these dimensions (in pixel)
.centerCrop() // this cropping technique scales the image so that it fills the requested bounds and then crops the extra.
.into(imageViewResizeCenterCrop);
FitCenter
FitCenter()
是一种“中心匹配”的方式裁剪方式,它裁剪出来的图片长宽都会小于等于ImageView的大小,这样一来。图片会完整地显示出来,但是ImageView可能并没有被填充满。
Glide
.with(context)
.load(UsageExampleListViewAdapter.eatFoodyImages[0])
.override(600, 200)
.fitCenter()
.into(imageViewResizeFitCenter);
在后面的文章里,我们将会提到除了CenterCrop和FitCenter以外,其他一些自定义的变换。
展望
在这篇文章里,学习了如何调整图片显示的尺寸。这对于设计一款优秀的app是非常有用的。在我们学习Glide更多高级应用之前,我们再多讲一个Glide特有的功能:显示Gif图片和视频。