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 來源:簡書 著做權歸做者全部。商業轉載請聯繫做者得到受權,非商業轉載請註明出處。