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