美文网首页Android开发Android知识半栈工程师
fresco 加载GIF支持转换静态图,第一帧

fresco 加载GIF支持转换静态图,第一帧

作者: 麦封 | 来源:发表于2017-11-28 15:29 被阅读0次

最近在开发中遇到一个小问题,自定义的相册,有大量的GIF图片,通常Android的ImageView不能加载Gif图片,如不做任何处理,那么加载到ImageView中的Gif只显示第一帧,虽然只是显示一帧,但是加载的是相当的慢,因为它需要decode整个GIF文件,通过imageview源码看到,setImageUri(Uri uri),最后调用到如图,其实就是BitmapFactory的decodefile,当然加载的时候你不能加载原图,这时候你就得取缩略图,可是缩略图系统有没有提供,所以GIF图片还是要找方法处理

图1

要想不全部加载,只能自己去写一个decode第一帧的方法,但是那样的话,加载大量的话,无论是从效率上、内存上都不是最好的选择。

那样只能从加载的框架上着手了,我们大多情况下都是想让GIF图片动起来,动起来的方法很多,什么glide,fresco,都支持GIF的播放,还有一些自定义封装的库也能对GIF做解码,但是对于Android不是很牛逼的程序员来说,自己遇到的问题,肯定有人已经解决了,拿我现在的用的框架Fresco来说,里面有一个imagedecodeOptions 就对这个有了支持,很明白,意思为是否强制decode成静态非动画里的图片图2。

图2 图3

然后在我们设置Imagerequest的时候加上这个参数,OK,大功告成,但是我还是想知道它是怎么实现的,其实它的实现,都是基于它依赖的decode库,

图4

我们看到当判断options.forceStaticImage之后,就return了,也就是不执行下面的decodeAllFrames,return回一个previewBitmap,可以理解为第一帧,作者比对了一下decodeallframe和createPreviewBitamp,简单来说就是,一个是for循环,一个是单次,其他没啥区别。

OK,今天就到这里,第一次写这个,还请大家多多鼓励,多多批评。

大吉大利!


相关文章

  • fresco 加载GIF支持转换静态图,第一帧

    最近在开发中遇到一个小问题,自定义的相册,有大量的GIF图片,通常Android的ImageView不能加载Gif...

  • Fresco Gif加载优化

    Fresco Gif加载优化 因为项目中需要用到加载Gif动图,而我们的图片加载框架用的就是Fresco,所以自然...

  • Fresco Gif加载解析

    Fresco Gif加载解析 普通Gif加载 先看性能表现效果图: 从上面三张图可以看的出来普通的加载会频繁GC,...

  • Fresco使用

    Fresco是Facebook出品的一个超级强大的开源图片加载库,支持Gif,Webp格式的图片加载,支持渐进式显...

  • Android SketchImageView 加载Gif图片,

    遇到的问题 列表加载gif图片,用Fresco,Glide,android-gif-drawable等都能实现简单...

  • iOS开发之解析GIF图片

    获取GIF文件每一帧的图片 我们平时使用SDWebImage/GIF加载图片习惯了,但是有时候确实需要获取GIF图...

  • iOS加载本地和网络gif图片

    gif加载已更换为新版,老版依然可用,新版中去除了使用timer加载gif,改为由帧动画加载,完全还原每一帧图片的...

  • Android加载本地gif动画

    Android官方并未提供直接显示gif图片资源的功能,我们可以通过Fresco图片加载库实现。Fresco是Fa...

  • iOS 创建GIF动图

    当我们网络加载GIF,或者获取到本地GIF的数据data时,可以将data转换成动图UIImage //获取动图 ...

  • 安卓加载动画文件

    Fresco加载Gif动画 首先在gradle文件添加依赖 封装的接口如下(Kotlin):

网友评论

    本文标题:fresco 加载GIF支持转换静态图,第一帧

    本文链接:https://www.haomeiwen.com/subject/lvtebxtx.html