在使用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