https://www.jianshu.com/p/c3a0c64d6954java
使用glide显示gif动图时, 报错ios
http://pic.wenwen.soso.com/pqpic/wenwenpic/0/20171116143737-1895154083_gif_398_305_3740344/0git
在浏览器可以打开动图, 可是glide加载时只显示静态图片, 而且log有错误:github
Glide: Load failed for http://pic.wenwen.soso.com/pqpic/wenwenpic/0/20171116143738-1327109971_gif_405_293_3665345/0 with size [-2147483648x-2147483648]浏览器
class com.bumptech.glide.load.engine.GlideException: Failed to load resourceide
Cause (1 of 1): class com.bumptech.glide.load.engine.GlideException: Failed LoadPath{ContentLengthInputStream->GifDrawable->GifDrawable}, REMOTE动画
Cause (1 of 1): class com.bumptech.glide.load.engine.GlideException: Failed DecodePath{ContentLengthInputStream->GifDrawable->GifDrawable}code
发现这个问题的缘由是由于上面那个gif图片格式不够完整, 只有63帧, 而原始图有95帧, 原始图地址:对象
https://wx2.sinaimg.cn/large/866a67c7gy1fkaw7ewstng20b208hhdx.gif图片
而在浏览器 或者ios系统上都能支持这个图片的动画展现. 说明人家的解码库很健壮.
(同事说即刻的gif解码器是native层的, 听起来很高大上啊)
而glide的解码库 其实就是一个java文件了, 从名字看就好像是说要按照标准的gif格式来.:com.bumptech.glide.gifdecoder.StandardGifDecoder.java
最终解决方案: 只能比照这个解码器, 本身修改一下, 让其兼容格式不完整的gif图片, 而怎么把本身定制的而这个解码器对象, 赋值给glide, 达到替换原始解码器的效果. 为了后面这个事情, 折腾了一下午, 对glide的掌握仍是不够深刻啊.
最终搞定了, 已经放到github上, 目前仍是纯java层的实现, 听说当页面上gif动图显示太多时会有效率问题,后续考虑在native层重写一遍
https://github.com/shaopx/InCompleteGifDecoder
做者:vb12 连接:https://www.jianshu.com/p/c3a0c64d6954 来源:简书 著做权归做者全部。商业转载请联系做者得到受权,非商业转载请注明出处。