資源描述:
《Android 平滑圖片加載和緩存庫 Glide 使用詳解》由會員上傳分享,免費在線閱讀,更多相關內(nèi)容在教育資源-天天文庫。
1、Android平滑圖片加載和緩存庫Glide使用詳解來源:互聯(lián)網(wǎng)?????時間:2015-8-268:04:09本篇文章主要介紹了"Android平滑圖片加載和緩存庫Glide使用詳解",主要涉及到方面的內(nèi)容,對于Android開發(fā)感興趣的同學可以參考一下:在圖片加載庫爛大街的今天,選擇一個適合自己使用的圖片加載庫已經(jīng)成為了每一個Android開發(fā)者的必經(jīng)之路?,F(xiàn)在市面上知名的圖片加載庫有UIL,Picasso,V...··在圖片加載庫爛大街的今天,選擇一個適合自己使用的圖片加載庫已經(jīng)成為了每一個Android開
2、發(fā)者的必經(jīng)之路?,F(xiàn)在市面上知名的圖片加載庫有UIL,Picasso,VolleyImageLoader,Fresco以及我們今天的主角Glide。它們各有千秋,不能評定誰一定比誰好,只能說哪一個更適合你。我的理解下面我來談一下個人對這些圖片加載庫的理解,如有錯誤,還望指教。UniversalImageLoader:一個強大的圖片加載庫,包含各種各樣的配置,最老牌,使用也最廣泛。Picasso:Square出品,必屬精品。和OkHttp搭配起來更配呦!VolleyImageLoader:Google官方出品,可惜不
3、能加載本地圖片~Fresco:Facebook出的,天生驕傲!不是一般的強大。Glide:Google推薦的圖片加載庫,專注于流暢的滾動。更多詳情請看stackoverflow上這個問題。初試Glide下面進入今天的主題,相信之前很多同學都看到過這篇介紹Glide的文章,中文版在這里。文中從各個方面介紹和比較了Glide與Picasso,總體來說二者極為相似,有著近乎相同的API的使用風格。但Glide在緩存策略和加載GIF方面略勝一籌。最后作者也極力推薦了這個庫。而且據(jù)說在Google新出的Photos應用中,
4、到處可見Glide的蹤跡??吹竭@里,你是不是已經(jīng)迫不及待的想試一試這個庫呢?就在你下定決心嘗試一記的時候,你又聽說Yelp?app(據(jù)說是美國的大眾點評)也在使用這個吊炸天的庫。你的心中激動萬分,發(fā)四一定要使用這個庫。說干就干,打開AndroidStudio,在builde.gradle里面添加上compile'com.github.bumptech.glide:glide:3.6.1'然后全局搜索圖片加載的地方,全部換成了下面的代碼:Glide.with(mContext).load(url).placehol
5、der(R.drawable.loading_spinner).crossFade().into(myImageView);在經(jīng)過漫長的編譯過程之后,再次打開APP,看到有著漸現(xiàn)效果的圖片呈現(xiàn)在你的面前,你不禁叫道:“wocao,真TM帥!為什么我以前沒有發(fā)現(xiàn)呢?”。不過在你使用了幾天之后你會發(fā)現(xiàn)一些問題:為什么有的圖片第一次加載的時候只顯示占位圖,第二次才顯示正常的圖片呢?為什么我總會得到類似Youcannotstartaloadforadestroyedactivity這樣的異常呢?為什么我不能給加載的圖片s
6、etTag()呢?為什么?為什么?這么NB的庫竟然會有這么多的問題。沒錯,這就是我今天要講的重點。怎么避免上面的問題發(fā)生。一些解決方案1.如果你剛好使用了這個圓形Imageview庫或者其他的一些自定義的圓形Imageview,而你又剛好設置了占位的話,那么,你就會遇到第一個問題。如何解決呢?方案一:不設置占位;方案二:使用Glide的TransformationAPI自定義圓形Bitmap的轉換。這里是一個已有的例子;方案三:使用下面的代碼加載圖片:Glide.with(mContext).load(url).
7、placeholder(R.drawable.loading_spinner).into(newSimpleTarget(width,height){@OverridepublicvoidonResourceReady(Bitmapbitmap,GlideAnimationanim){//setImageBitmap(bitmap)onCircleImageView}};2.至于第二個問題,請記住一句話:不要再非主線程里面使用Glide加載圖片,如果真的使用了,請把context參數(shù)換成getAp
8、plicationContext。更多的細節(jié)請參考這個issue。3.為什么不能設置Tag,是因為你使用的姿勢不對哦。如何為ImageView設置Tag呢?且聽我細細道來。方案一:使用setTag(int,object)方法設置tag,具體用法如下:Java代碼是醬紫的:Glide.with(context).load(urls.get(i).getUrl()).fitC