🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
在以前发表的博客文章中我们已经看到可以从各种来源来显示图片。我们学到了如何去处理图像的显示,改变大小和用标准选项缩放图像。这篇博客将会告诉你一个独特的功能:显示 Gif 和本地视频。 **显示 Gif** 有很多图片加载库来去加载和显示图片。能支持 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 的伟大的事情是你仍然可以使用你的标准去调用处理这个 Gif: ~~~ Glide .with( context ) .load( gifUrl ) .placeholder( R.drawable.cupcake ) .error( R.drawable.full_cake ) .into( imageViewGif ); ~~~ **Gif 检查** 上面的代码有一个潜在的问题是,如果提供的来源不是一个 Gif,可能只是一个常规图片,这就没有办法显示这个问题。Glide 接受 Gif 或者图片作为 `load()` 参数。如果你期望这个 URL 是一个 Gif,Glide 不会自动检查是否是 Gif。因此他们引入了一个额外的防区强制 Glide变成一个 Gif `asGif()`: ~~~ Glide .with( context ) .load( gifUrl ) .asGif() .error( R.drawable.full_cake ) .into( imageViewGif ); ~~~ 如果 gifUrl 是一个 git,这没什么变化。然而,不像之前那样,如果这个 gifUrl 不是一个 Gif,Glide 将会把这个 load 当成失败处理。这样做的的好处是,`.error()` 回调被调用并且错误占位符被显示,即使 gifUrl 是一个完美的图片(但不是一个 Gif)。 **Gif 转为 Bitmap** 如果你的 App 显示一个位置的网络 URL 列表,它可能遇到常规的图片或者 Gif。在某些情况下,你可能对不想系那是整个 Gif。如果你仅仅想要显示 Gif 的第一帧,你可以调用 `asBitmap()` 去保证其作为一个常规的图片显示,即使这个 URL 是一个 Gif。 ~~~ Glide .with( context ) .load( gifUrl ) .asBitmap() .into( imageViewGifAsBitmap ); ~~~ 这让你用 Glide 显示所有已知的 url 显示为图片的形式。这很简单,试一试! **显示本地视频** 现在来谈谈视频。Glide 还能显示视频!只要他们是存储在手机上的。让我们假设你通过让用户选择一个视频后得到了一个文件路径: ~~~ String filePath = "/storage/emulated/0/Pictures/example_video.mp4"; Glide .with( context ) .load( Uri.fromFile( new File( filePath ) ) ) .into( imageViewGifAsBitmap ); ~~~ 这里需要注意的是,这仅仅对于**本地视频**起作用。如果没有存储在该设备上的视频(如一个网络 URL 的视频),它是不工作的!如果你想显示视频从网络 URL,去看看 [VideoView](https://developer.android.com/reference/android/widget/VideoView.html?hl=zh-cn)。 **Outlook** 读完这篇博客,你应该能像使用图片一样使用 Gif 和本地视频了。Glide 与 Gif 的协作是非常顺滑和方便的。下周,我们会为你介绍 Glide 的缓存系统。