写在前面:这篇文章原著是Norman Peitek,所有著作权归原作者所有,我只是在学习Glide的时候看到有间书的作者 weiyf 写了双语的翻译,觉得非常好,但是作者只写了几篇,估计是比较忙吧。于是我就去看原博了,发现原博的英文也不会很难懂,这里只是方便学习做了翻译(顺便学英语(逃),建议英文基础还可以的同学直接看原文:https://futurestud.io/tutorials/glide-displaying-gifs-and-videos
前几篇传送门:
- 【双语】Glide — 入门(Glide — Getting Started)
- 【双语】Glide — 高级加载(Glide — Advanced Loading)
- 【双语】Glide — 列表适配器(ListView, GridView)(Glide — ListAdapter (ListView, GridView))
- Glide-Placeholders & Fade Animations(默认图与过渡动画)
- Glide-Image Resizing & Scaling(图片缩放、调整)
原文传送门:
- 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)
正文:
在前面的文章我们讲了如何从各种数据源加载并显示图片,我们学习了如何改变图片:通过一些标准的方法设置图片大小、裁剪。
本文将讲述Glide特色功能:显示Gif图片和本地视频。
显示Gifs
有很多图片加载框架提供了加载并显示图片的功能,但支持Gif则有点特殊,如果你的app需要这个功能,那么它非常必要。Glide加载Gif的体验让人惊叹,因为它非常简单。如果你想显示Gif,你只需要像之前那样写就可以了:
//这动图吓我一跳 - -#
String gifUrl = "http://i.kinja-img.com/gawker-media/image/upload/s--B7tUiM5l--/gf2r69yorbdesguga10i.gif";
Glide
.with( context )
.load( gifUrl )
.into( imageViewGif );
就是这么简单!这样就可以在ImageView上显示一个Gif图片了,并且它是自动播放的。更酷的是你依然可以像之前那样做一些额外的处理:
Glide
.with( context )
.load( gifUrl )
.placeholder( R.drawable.cupcake )//加载出来前显示的图片
.error( R.drawable.full_cake )//加载失败后显示的图片
.into( imageViewGif );
Gif Check :确保是Gif图片
以上代码潜在的问题是:如果你的图片源存放的不是一张Gif,那么可能只是一张普通的图片,没有办法声明这种情况。Glide允许Gifs或者是普通图片作为load()
方法的参数,如果开发者认为URL是一张Gif,而实际上不是的话。Glide没有办法自动检测到。因此,这里提供了另一种方法,来确保Glide请求到的是一张Gif动图 asGif()
:
Glide
.with( context )
.load( gifUrl )
.asGif()
.error( R.drawable.full_cake )//加载失败 的图片
.into( imageViewGif );
如果gifUrl指向一张Gif图片,那么万事大吉。但如果不是,那么与之前不同的是,此时Glide会认为是加载失败。那么就有一个好处,.error()
方法会被回调过来,那么就会显示我们指定的 加载失败 的图片。就算gifUrl指向一张完美的图片(啥图?),只要它不是Gif动图,还是会被认为是加载失败。
Cache Settings :缓存设置
在大多数情况下,如果你调用了.diskCacheStrategy(DiskCacheStrategy.SOURCE)
,那么加载Gif的时候明显会更快:
Glide
.with( context )
.load( gifUrl )
.asGif()
.error( R.drawable.full_cake )
.diskCacheStrategy(DiskCacheStrategy.SOURCE)
.into( imageViewGif );
作者:我们将在12月份出一个新的教程:讲述关于 Glide缓存 的更多的细节和背后实现;
Display Gif as Bitmap:将Gif转为Bitmap显示
如果你的app通过一个包含许多图片链接的列表(List<url>)来显示图片,那么可能会包含普通图片和Gif动图。有时候你可能想不要完整地播放整个Gif图片,如果你只想要显示Gif的第一帧画面,那么asBitmap()
就可以保证作为一张普通的图片来显示,即使链接指向的是一张Gif动图。
Glide
.with( context )
.load( gifUrl )
.asBitmap()
.into( imageViewGifAsBitmap );
以上,就是所有Glide显示Gifs图片的知识,非常简单,试试吧!
Display of Local Videos:播放本地视频
Gif的加强版就是视频啦,Glide同样可以显示视频文件的缩略图,并且是和视频同样长度的。假设我们通过让用户选择来获取一个视频文件的路径:
String filePath = "/storage/emulated/0/Pictures/example_video.mp4";
Glide
.with( context )
.load( Uri.fromFile( new File( filePath ) ) )
.into( imageViewGifAsBitmap );
再次提醒:这只对本地视频文件有效!其他不是存储在设备上的视频(比如网络视频)是不能播放的。另外,它只会显示视频的第一帧画面。
如果你想播放视频或者从网络链接上查看视频,那么试试这个 VideoView.(这个需要翻墙,贴一篇简书的)
Outlook:展望
读完这篇文章,你应该可以像加载普通图片一样去加载Gif和本地视频文件了。Glide使得显示Gif图片非常流畅、方便;下一周,我们将介绍Glide的缓存机制。