这一节我们将讲到Glide如何加载gif图
(我最开始使用的图片框架其实是Imagerloader和Picasso,但是他们都不支持gif的加载,所以后来我才开始尝试使用Glide,慢慢的发现Glide许多的强大功能)
Glide 系列目录
1.简单加载
如果只是简单加载gif,其实跟加载普通图片一样
Glide.with(this).load(mGifUrl).placeholder(R.mipmap.place).error(R.mipmap.icon_photo_error).into(mIv);
2.把gif当作普通图片加载(asBitmap)
如果希望加载gif时只加载gif的第一帧,把gif当作普通图片一样加载,那么只需要加上asBitmap方法即可
Glide.with(this).load(mGifUrl).asBitmap().placeholder(R.mipmap.place).error(R.mipmap.icon_photo_error).into(mIv);
3.检查是否gif(asGif)
如果你希望加载的只是gif,如果不是gif就显示错误图片,那么只用加上asGif方法即可
Glide.with(this).load(mGifUrl).asGif().placeholder(R.mipmap.place).error(R.mipmap.icon_photo_error).into(mIv);
4.加载本地视频缩略图
网络上很多文章上都是从一篇译文里面拷贝过来的,里面说Glide可以加载本地视频,但是那篇译文漏翻译一句了,Glide只会加载本地视频的第一帧,也就是缩略图,而且其实加载缩略图的时候也无需转化为Uri,直接把File丢进去就行了
mVideoFile = new File(Environment.getExternalStorageDirectory(), "xiayu.mp4");
Glide.with(this).load(mVideoFile).placeholder(R.mipmap.place).error(R.mipmap.icon_photo_error).into(mIv);
在大多数情况下,当你使用diskCacheStrategy(DiskCacheStrategy.SOURCE)时,Gif的加载速度会显着提高(其实就是把gif资源缓存到磁盘)
Glide.with(this).load(mGifUrl).diskCacheStrategy(DiskCacheStrategy.SOURCE).placeholder(R.mipmap.place).error(R.mipmap.icon_photo_error).into(mIv);
前言:这一节我们将讲到Glide如何加载gif图(我最开始使用的图片框架其实是Imagerloader和Picasso,但是他们都不支持gif的加载,所以后来我才开始尝试使用Glide,慢慢的发现Glide许多的强大功能)Glide 系列目录1.Glide-入门教程2.Glide-占位图以及加载动画3.Glide-加载本地图片4.Glide-加载Gif1.简单加载如果只是简单加载gif,其
//加载glide gif
implementation 'com.github.bumptech.glide:glide:4.9.0'
annotationProcessor 'com.github.bumptech.glide:compiler:4.9.0'
2,assets中加入gif图片资源
Glide是一个快速高效的Android图片加载库,可以自动加载网络,本地文件,app资源中的文件,注重于平滑的滚动。添加依赖添加网络权限。Glide的介绍Glide的基本使用
指定图片的格式Glide占位符指定图片的大小过渡动画图片变换Generated APIGlide.with()方法用于创建一个加载图片的实例with()方法可以接收Context,Activity,Fragment类型的参数,这个参数的生命周期将会和加载的图片绑定在一起,如果传递的是activity,那么这个图片是和act
// clear all pixels when meet first frame and drop prev image from last loop
if (previousFrame == null) {
if (previousImage != null) {
// 回收上一帧的Bitmap
bitmapProvider.release(previousImage);
previousImage = null;
// 并且将Bitmap的像素填充黑色
Arrays.fill(dest, COLO
在第一个页面中,使用Glide加载GIF时,未设置asGif或diskcachestrategy.NONE,第一个页面中的ImageView能正常加载并播放GIF图:
@BindingAdapter("icon")
public static void setIcon(ImageView imageView,String url){
Glide.with(imag
最近在一个群里看到有人说面试遇到一个问题是 “Glide 是如何加载 GIF 动图的?”,他说没看过源码回答不出来…
好家伙!现在面试都问的这么细了?我相信很多人即使看过源码也很难回答出来,包括我自己。比如之前自己虽然写了两篇 Glide 源码的文章,但是只分析了整个加载流程和缓存机制,关于 GIF 那里只是粗略的看了一下,想要回答的好还是有难度的。那么这篇文章就好好分析一下吧,这篇依然采用 4.11.0 版本来分析。
系列文章:
Android 主流开源框架(一)OkHttp 铺垫-HttpCli
Glide是一个面向Android的快速高效的开源媒体管理和图像加载框架,它将媒体解码、内存和磁盘缓存以及资源池封装到一个简单易用的接口中;
Glide支持获取、解码和显示视频静像、图像和动画GIF。Glide包括一个灵活的API,允许开发人员插入几乎任何网络堆栈。默认情况下,Glide使用自定义的基于HttpUrlConnection的堆栈,但也包括插件到Google的Volley项目或Square的OkHttp库中的实用程序库。
Glide的主要重点是尽可能平滑和快速地滚动
参考文献:
Tron, R., Thomas, J., Loianno, G., Daniilidis, K., & Kumar, V. (2016). A distributed optimization framework for localization and formation control: Applications to vision-based measurements. IEEE Control Systems Magazine, 36(4), 22–44.
在使用glide加载gif动画,有时需要设置播放的次数,然后播放玩一次或者几次之后,需要在播放完做一些其他的操作,直接看代码:Glide.with(this)
.load(R.drawable.xiaoguo)
.diskCacheStrategy(DiskCacheStrategy.SOURCE)
Glide图片框架是可以直接加载GIF图的,但是做一个银行合作项目的时候,由于有需要出货页面需要加载一个GIF图,但是发现在使用Glide框架加载Gif图片,明显发现有延迟.
经过查看glide加载Gif图片的源码得知:Glide在加载Gif的图片帧的时候,上一帧的渲染以及下一帧的准备是串行的,这个过程中,如果出现下一帧的准备阶段时间超过了Gif间隔播放的时长,就会造成播放卡顿.而且此过程中,StandardGifDecoder只保留上一帧的数据,每次获取当前需要绘制的帧的时候都会从BitmapP
1. 首先,您需要下载
Glide-3.7.0.jar文件并将其保存在您的项目文件夹中。
2. 在Android Studio中,右键单击您的项目文件夹,然后选择“Open Module Settings”。
3. 在“Modules”选项卡中,选择您的应用程序模块,然后单击“Dependencies”选项卡。
4. 单击“+”按钮,然后选择“File dependency”。
5. 在弹出的对话框中,选择您刚刚下载的
Glide-3.7.0.jar文件。
6. 单击“OK”按钮,然后单击“Apply”按钮。
7. 现在,您已经成功添加了
Glide-3.7.0.jar框架,可以在您的项目中使用它了。