Glide — 播放Gif & 视频
在前面的文章中,我们一起学习了从各种源加载图片,一起学习了如何改变图片大小和缩放等设置。这篇文章会展示给你一个Glide的特性:播放Gif和本地视频。
Glide 系列概览
- 入门简介
- 高级加载
- 适配器(ListView, GridView)
- 占位图& 淡入淡出动画
- 图片大小 & 缩放
- 播放GIF & 视频
- 缓存基础
- 请求优先级
- 缩略图
- 回调:定制view中使用SimpleTarget和ViewTarget
- 通知栏和桌面小控件的图片加载
- 异常: 调试和报错处理
- 自定义变换
- 用animate()定制动画
- 整合网络协议栈
- 用Modules定制Glide
- Glide Module 案例: 接受自签名HTTPS证书
- Glide Module 案例: 自定义缓存
- Glide Module 案例: 通过加载自定义大小图片优化
- 动态使用 Model Loaders
- 如何旋转图片
- 系列综述
播放 Gif动画
许多图片加载库能处理好图片的加载与显示,但很多并不支持Gif。如果你的app需要支持Gif,Glide的简单会让体验更惊艳。如果你想要播放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另外一个非常棒的功能是你仍然可以使用标准的调用去处理Gif。
Glide
.with( context )
.load( gifUrl )
.placeholder( R.drawable.cupcake )
.error( R.drawable.full_cake )
.into( imageViewGif );
Gif 检查
Glide接受Gif和图片作为load()的参数。上面代码中潜在的一个问题,如果提供的源不是Gif,可能是一个普通的图片。作为开发者,你当然希望那个URL是一个Gif,但Glide不能自动检测到底是不是,这样引入了一个额外的方法asGif()强迫生成一个Gif:
Glide
.with( context )
.load( gifUrl )
.asGif()
.error( R.drawable.full_cake )
.into( imageViewGif );
如果gifUrl是一个gif,没有异常发生。但如果gifUrl不是一个Gif,即使是一个完好的图片(非Gif),Glide也会加载失败。.error()回调方法会被调用,并加载错误占位图。
把Gif当作Bitmap播放
如果你的app需要显示一组网络URL,可能包括普通的图片或者Gif。在一些情况下,你可能并不在意是否要播放完整的Gif。如果你只是想要显示Gif的第一帧,当URl指向的的确是Gif,你可以调用asBitmap()将其作为常规图片显示。
Glide
.with( context )
.load( gifUrl )
.asBitmap()
.into( imageViewGifAsBitmap );
这边介绍了用Glide所有的知识点去播放Gif,非常简单,试试吧!
注意事项 ——译者注##
实际中加载gif并没有上述的那么简单,可能会遇到很多问题:
比如加载慢,比如OOM。
1.git图片大小,图片格式是否正确,你可以查看下你需要加载的gif图片大小,需要多长时间。太大的图片,加载慢,又浪费流量,不利于用户体验。
2.网速是不是正常?从chrome里加载一下,看需要多长时间。
3.磁盘缓存策略问题。加载gif,就磁盘缓存还能设置全局缓存么?压缩调整gif大小,重新编码,是不是很消耗时间?官方给的方法是使用用:.diskCacheStrategy(DiskCacheStrategy.SOURCE)
4.在ListView等列表控件中滑动的时候,考虑添加 Glide.with(context).pause|resumeRequests()
,可以参考github上的开发者答复
5.开启Glide的相关log,查看异常原因,具体问题具体分析。不会开启的,请阅读 异常: 调试和报错处理。
6.还不能解决,再访问https://github.com/bumptech/glide,看一下里面的issue,搜索一下跟你代码相关的关键字。
播放本地视频
介绍完Gif,下面介绍一下播放视频。Glide也能播放存储在手机上的本地视频。假设你能通过用户选择获取到视频文件的路径:
String filePath = "/storage/emulated/0/Pictures/example_video.mp4";
Glide
.with( context )
.load( Uri.fromFile( new File( filePath ) ) )
.into( imageViewGifAsBitmap );
重要提示:这里只对本地视频有效。对于并非存在本地的视频(如网络URL)并不支持!如果你想要从网络URL播放视频,参考VideoView。
展望
看完了这篇文章,你应当能够和处理图片一样,处理Gif和本地视频了。Glide可以让Gif的播放非常流畅和方便。后续的文章将要为你介绍Glide的缓存系统。