? ? ? ? ?最近做了不少動效锣披,免不了要和Lottie打交道滑臊,然后UI同學(xué)更新了一版本Lottie坡慌,當(dāng)圖片放在壓縮包中時ios無法展示状原,當(dāng)圖片壓縮成base64碼放入data.json文件時android無法展示了斜脂,android端加載本地zip lottie使用的是LottieCompositionFactory.fromZipStreamSync() 抓艳。
? ? ? ?通過源碼得知,首先通過流讀取zip中文件帚戳,主要是
?1玷或、讀取data.json 動效數(shù)據(jù)解析成Composition儡首,
?2、 png等類型圖片等放入Map
?3偏友、接著將Map中的bitmap設(shè)置給Compostion中的imageAsset
?4蔬胯、檢查Compostion中的imageAsset都已經(jīng)設(shè)置了bitmap
所以將圖片轉(zhuǎn)成base64直接在data.json中使用,然后壓縮成zip下發(fā)是無法展示Lottie動效的位他,因為fromZipStreamSync() 方法內(nèi)部只讀zip包中的圖片氛濒。在進(jìn)行第4步時發(fā)現(xiàn)Compostion中的imageAsset沒有bitmap數(shù)據(jù)就直接結(jié)束了
? ? ? ?后來又想到,同時也在zip包中放png圖片就可以解決了鹅髓,但是源碼中解析data.json的時候舞竿,如果圖片是base64會將那串很長的base64作為圖片的名字,所以在對對比zip包中圖片名字和Compostion中的imageAsset.fileName窿冯,我將圖片命名為那串base64時失敗了骗奖,應(yīng)該是里面的特殊字符導(dǎo)致,還有那串base64很長很長醒串。
? ? ? 所以建議分端下發(fā) ios可以用含有base64的zip重归,android則使用不含有base64的; 活著android端判斷下如果只有data.json則解壓后直接加載json文件