Glide 展示 gif 動態圖的介紹和走過的坑

澀郎發表於2016-08-22

每天跟我要展示gif圖demo的人很多,我有點納悶,大家不知道很多第三方庫都可以載入gif嗎?比如Glide和Fresco都可以啊,大家不用它載入gif圖嗎?我有點納悶,這幾個方式載入的效果都還可以。當然也有點坑在裡面,需要大家注意一下。

我以前寫的那個關於gif圖的demo其實是很早以前寫的,但是那時候水平很菜,好幾年前了,也不是完全自己寫的,參考的別人寫的,之後自己整理的。所以很不咋的。我發現每天都有人跟我要展示gif的demo,我想分享給大家展示gif圖的幾個好用的庫。

Glide

如果用過Glide的同學可能大家都知道Glide是谷歌的一位員工開源的,名字叫:bumptech。這個庫被廣泛的運用在google的開源專案中,這個Glide說到底和Picasso很像,Glide和Picasso有90%的相似度,應該是基於Picasso開發的。但是Glide是支援動態gif圖的。

Glide gif圖使用

其實和載入普通圖片的方式是一樣的,如下:

 Glide.with(this).load("圖片地址:url").asGif().into(iv);複製程式碼

這裡如果使用了.asGif()方法的話,傳入的圖片必須是gif圖,其他圖會報錯。當然不使用.asGif()方法同樣也可以載入gif圖。

遇到的坑

你以為這樣就可以了嗎?有時候有些坑大家不得不踩,你有沒有遇到過載入gif圖很慢或者出不來的情況?有的話,解決辦法我們也是有的,如下:

Glide.with(this).load(url).asGif().diskCacheStrategy(DiskCacheStrategy.SOURCE).into(imageView);複製程式碼

加入了快取策略,快取策略有四種如下:

/** Caches with both {@link #SOURCE} and {@link #RESULT}. */
ALL(true, true),
/** Saves no data to cache. */
NONE(false, false),
/** Saves just the original data to cache. */
SOURCE(true, false),
/** Saves the media item after all transformations to cache. */
RESULT(false, true);複製程式碼

ALL和RESULT的快取策略不可以,NONE是不快取資料,SOURCE是快取原型,原圖。加上了如上的快取策略就解決了很慢或者有時載入不出gif圖的問題了。

可能大家還有一種要求就是,動態顯示gif圖的次數,比如我想顯示一次gif就停止,也有解決辦法如下:

Glide.with(this).load("url").diskCacheStrategy(DiskCacheStrategy.SOURCE).into(new GlideDrawableImageViewTarget(iv, 1));複製程式碼

這裡的GlideDrawableImageViewTarget(ImageView view, int maxLoopCount)這個方法,maxloopCount可以控制顯示次數,你不信試試。

還有一些話,是給投稿作者的,很抱歉,最近投稿的人挺多的,所以是排隊傳送的投稿文章,你們投稿的文章,我一定會推送的,還請按順序耐心等待推送,我一定會對得起大家的推送,讓更多的人看到你們的分享和無私奉獻的精神,在這裡我替看到你們文章的開發者感謝你們的投稿。

歡迎大家關注我的技術分享公眾號:非著名程式設計師(smart_android)。技術文章均先首發於我的技術分享的微信公眾號。

相關文章