Glide-显示Gif和视频(Displaying Gifs & Videos)

写在前面:这篇文章原著是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)来显示图片,那么可能会包含普通图片和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的缓存机制。

你可能感兴趣的:(Glide-显示Gif和视频(Displaying Gifs & Videos))