使用glide显示gif动图时, 报错
http://pic.wenwen.soso.com/pqpic/wenwenpic/0/20171116143737-1895154083_gif_398_305_3740344/0
在浏览器能够打开动图, 但是glide加载时只显示静态图片, 并且log有错误:
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 resource
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}
发现这个问题的原因是因为上面那个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