在使用glide加载gif动画,有时需要设置播放的次数,然后播放玩一次或者几次之后,需要在播放完做一些其他的操作,直接看代码:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

Glide.with( this )

.load(R.drawable.xiaoguo)

.diskCacheStrategy(DiskCacheStrategy.SOURCE)

.listener( new RequestListener<Integer, GlideDrawable>() {

@Override

public boolean onException(Exception arg0, Integer arg1,

Target<GlideDrawable> arg2, boolean arg3) {

return false ;

}

@Override

public boolean onResourceReady(GlideDrawable resource,

Integer model, Target<GlideDrawable> target,

boolean isFromMemoryCache, boolean isFirstResource) {

// 计算动画时长

GifDrawable drawable = (GifDrawable) resource;

GifDecoder decoder = drawable.getDecoder();

for ( int i = 0 ; i < drawable.getFrameCount(); i++) {

duration += decoder.getDelay(i);

}

//发送延时消息,通知动画结束

handler.sendEmptyMessageDelayed(MESSAGE_SUCCESS,

duration);

return false ;

}

}) //仅仅加载一次gif动画

.into( new GlideDrawableImageViewTarget(imageview, 1 ));

glide简单加载动画用法:

Glide.with(MainActivity.this).load(url).asGif().into(imageView); 

如果添加.asGif(),这样的话就只能加载gif文件,如果不加,既可以加载图片也可以加载.gif。

解决加载gif文件非常慢的情况:

为其添加缓存策略

Glide.with(MainActivity.this).load(url).asGif().diskCacheStrategy(DiskCacheStrategy.SOURCE).into(imageView); 

其中缓存策略可以为:Source及None,None及为不缓存,Source缓存原型.如果为ALL和Result就不行
DiskCacheStrategy.NONE 什么都不缓存
DiskCacheStrategy.SOURCE 仅仅只缓存原来的全分辨率的图像。
DiskCacheStrategy.RESULT 仅仅缓存最终的图像,即,降低分辨率后的(或者是转换后的)
DiskCacheStrategy.ALL 缓存所有版本的图像(默认行为)

设置gif播放次数:

这样写会报错的:

Glide.with(MainActivity.this).load(url).asGif().into(new GlideDrawableImageViewTarget(imageview, 1));

设置播放次数和播放监听的时候,不应加上.asGif()

Glide.with(MainActivity.this).load(url).into(new GlideDrawableImageViewTarget(imageview, 1));

new GlideDrawableImageViewTarget(imageview, 1) ,i mageview 是控件, 1 是播放次数

设置播放监听:

添加listener()

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

listener( new RequestListener<Integer, GlideDrawable>() {

@Override //加载出错

public boolean onException(Exception arg0, Integer arg1,

Target<GlideDrawable> arg2, boolean arg3) {

return false ;

}

@Override //加载完成

public boolean onResourceReady(GlideDrawable resource,

Integer model, Target<GlideDrawable> target,

boolean isFromMemoryCache, boolean isFirstResource) {

// 计算动画时长

GifDrawable drawable = (GifDrawable) resource;

GifDecoder decoder = drawable.getDecoder();

for ( int i = 0 ; i < drawable.getFrameCount(); i++) {

duration += decoder.getDelay(i);

}

//发送延时消息,通知动画结束

handler.sendEmptyMessageDelayed(MESSAGE_SUCCESS,

duration);

return false ;

}

})

转载于: https://www.jb51.net/article/98570.htm

原文链接: https://www.jb51.net/article/98570.htm Glide 版本3.7 目前不清楚4及以上版本是否有同样的 问题 今天 使用 glide 播放 gif 发现 播放 的速度很 ,在ios或者其他地方都没有这种 问题 。跟踪源码查找发现,与 播放 速度相关的是每一帧的延时时间:private void loadNextFrame() {if (!isRunning || isLoadPending) {return;}isLoadPending = true; gif Decod... 本文将系统讲解如何在 Android 项目中 使用 Glide 高效 加载 多种格式的图像资源,包括静态图、 GIF 动图、序列帧图像等,同时解析各类资源的适用场景、性能优化策略与常见 问题 排查。 这4种方式都能很好地在手机上运行,但在小米盒子上出现了不同的 问题 Glide 本身就是很好用的图片框架,但在小米盒子上出现了运行缓 问题 ,一个3秒的 GIF 图片需要十几秒的时间才能跑完。没有出现运行缓 问题 ,但刷新闪烁比较严重。Movie能正常显示 GIF 图片,但如果想只运行一 的情况下,很难显示到最后一帧的图片。最大的 问题 是版本要求太高,需要 Android 9.0。 Glide 是一个面向 Android 的快速高效的开源媒体管理和图像 加载 框架,它将媒体解码、内存和磁盘缓存以及资源池封装到一个简单易用的接口中; Glide 支持获取、解码和显示视频静像、图像和 动画 GIF Glide 包括一个灵活的API,允许开发人员插入几乎任何网络堆栈。默认情况下, Glide 使用 自定义的基于HttpUrlConnection的堆栈,但也包括插件到Google的Volley项目或Square的OkHttp库中的实用程序库。 Glide 的主要重点是尽可能平滑和快速地滚动 在上面的代码中,我们首先 使用 `Movie.decodeStream()` 方法 加载 GIF 图片,然后 设置 ImageView 的宽高为 GIF 图片的宽高。最后,在 `onDraw()` 方法中,我们 使用 `Movie.draw()` 方法将 GIF 图片绘制到 Canvas 上。其中,placeholder 和 error 是占位图和错误图,override 是 设置 图片的大小,centerCrop 是 设置 图片的缩放类型。其中,R.drawable. gif _image 是 gif 图片的资源 id。 最近学会了 使用 Glide 框架偷懒 加载 GIF 图片的方法,直接 使用 Glide 加载 ,不在布局文件中 使用 src指定文件,这样 Glide 会自动识别你要 加载 的图片是什么类型,然后自动去匹配 加载 的方式。 但是在实际的 使用 中又遇到了一些 问题 ,首 进入应用时, 加载 图片很 ,即使 加载 的图片是存在于drawable文件夹中的。这个 问题 很严重,虽然在 使用 时没什么不同但是很影响 使用 体验。 后来经过了网上各种资源的查找,解决... 参考:http://mrfu.me/2016/02/27/ Glide _Displaying_ Gif s_&_Videos/显示 Gif 有很多图片 加载 库来去 加载 和显示图片。能支持 Gif 有一些特别也是非常有帮助的,如果在你的 App 需要的话。 Glide 实现 Gif 是如此的特别和令人惊讶,因为它是如此的简单。如果你想显示一个 Gif ,你可以只 使用 和过去相同的调用方式就可以了:String gif U 做这个之前 百度了一些资料大多数都是将count 设置 为integerMax 然后通position%count 方式取得对应的数据集 这样虽然可以做到无限循环 但是有两个弊端 首先会创建大量对象,性能方面肯定是不好,其 是从第一页向右边滑的时候是无法滑动的。今天给大家分享个实现思路如下图创建三个图片视图放入ViewPager中 默认选中第二页 ,在接下来的滑动中每 滑动结束之后都将当前页码 设置 为第... 其实 Android 开发的知识点就那么多,面试问来问去还是那么点东西。所以面试没有其他的诀窍,只看你对这些知识点准备的充分程度。so,出去面试时先看看自己复习到了哪个阶段就好。上面分享的腾讯、头条、阿里、美团、字节跳动等公司2019-2021年的高频面试题,博主还把这些技术点整理成了视频和PDF(实际上比预期多花了不少精力),包含知识脉络 + 诸多细节,由于篇幅有限,上面只是以图片的形式给大家展示一部分。【 Android 思维脑图(技能树)】知识不体系? Glide 图片框架是可以直接 加载 GIF 图的,但是做一个银行合作项目的时候,由于有需要出货页面需要 加载 一个 GIF 图,但是发现在 使用 Glide 框架 加载 Gif 图片,明显发现有延迟. 经过查看 glide 加载 Gif 图片的源码得知: Glide 加载 Gif 的图片帧的时候,上一帧的渲染以及下一帧的准备是串行的,这个过程中,如果出现下一帧的准备阶段时间超过了 Gif 间隔 播放 的时长,就会造成 播放 卡顿.而且此过程中,Standard Gif Decoder只保留上一帧的数据,每 获取当前需要绘制的帧的时候都会从BitmapP