glide

https://github.com/scwang90/SmartRefreshLayout


Android圖片緩存之初識(shí)Glide

前言:

前面總結(jié)學(xué)習(xí)了圖片的使用以及Lru算法擅憔,今天來(lái)學(xué)習(xí)一下比較優(yōu)秀的圖片緩存開源框架宪躯。技術(shù)本身就要不斷的更迭颂暇,從最初的自己使用SoftReference實(shí)現(xiàn)自己的圖片緩存稚虎,到后來(lái)做電商項(xiàng)目自己的實(shí)現(xiàn)方案不能滿足項(xiàng)目的需求改用Afinal,由于Afinal不再維護(hù)而選擇了師出同門的Xutils,中間也接觸過別的開源框架比如Picasso乐纸,對(duì)Picasso的第一次印象就不太好,初次接觸是拿到了公司剛從外包公司接手過來(lái)的圖片社交類app摇予,對(duì)內(nèi)存占用太大汽绢,直接感受就是導(dǎo)致ListView滑動(dòng)有那么一點(diǎn)卡頓,老牌的圖片緩存框架universalImageLoader聽說過一直沒有真正使用過侧戴,之前項(xiàng)目都很小宁昭,差不多幾百萬(wàn)級(jí)別的app,一直使用的都是Xutils酗宋,最近覺得項(xiàng)目大起來(lái)了久窟,萬(wàn)一Xutils不維護(hù)了或者說要求支持的圖片格式多起來(lái)的時(shí)候,可能Xutils就不是最佳選擇了斥扛,這也是來(lái)學(xué)習(xí)Gilde的根本動(dòng)機(jī)吧。其實(shí)本來(lái)想著去學(xué)習(xí)Facebook的Fresco圖片框架稀颁,但是簡(jiǎn)單的看了一下楣黍,需要連同自定義控件一起使用匾灶,功能雖然強(qiáng)大,但是對(duì)于已經(jīng)在維護(hù)的項(xiàng)目修改成本那可不是一般的高,以后有興趣在學(xué)習(xí)吧蒜胖!

圖片緩存相關(guān)博客地址:

Android圖片緩存之Bitmap詳解

Android圖片緩存之初識(shí)Glide

Android圖片緩存之Glide進(jìn)階

Android圖片緩存之Lru算法

Glide簡(jiǎn)介:

Glide 是 Google 員工的開源項(xiàng)目, Google I/O 上被推薦使用缀壤,一個(gè)高效骑脱、開源、Android設(shè)備上的媒體管理框架,它遵循BSD、MIT以及Apache 2.0協(xié)議發(fā)布些椒。Glide具有獲取石窑、解碼和展示視頻劇照棺棵、圖片余耽、動(dòng)畫等功能轨域,它還有靈活的API干发,這些API使開發(fā)者能夠?qū)lide應(yīng)用在幾乎任何網(wǎng)絡(luò)協(xié)議棧里必峰。創(chuàng)建Glide的主要目的有兩個(gè),一個(gè)是實(shí)現(xiàn)平滑的圖片列表滾動(dòng)效果,另一個(gè)是支持遠(yuǎn)程圖片的獲取粗仓、大小調(diào)整和展示借浊。

gitHub地址:https://github.com/bumptech/glide

Glide特點(diǎn)

使用簡(jiǎn)單

可配置度高塘淑,自適應(yīng)程度高

支持常見圖片格式Jpg png gif webp

支持多種數(shù)據(jù)源網(wǎng)絡(luò)存捺、本地、資源捌治、Assets 等

高效緩存策略支持Memory和Disk圖片緩存 默認(rèn)Bitmap格式采用RGB_565內(nèi)存使用至少減少一半

生命周期集成根據(jù)Activity/Fragment生命周期自動(dòng)管理請(qǐng)求

高效處理Bitmap使用Bitmap Pool使Bitmap復(fù)用,主動(dòng)調(diào)用recycle回收需要回收的Bitmap兼吓,減小系統(tǒng)回收壓力

Glide簡(jiǎn)單使用

1.)添加引用 build.gradle 中添加配置

compile 'com.github.bumptech.glide:glide:3.7.0'

2.)設(shè)置綁定生命周期

我們可以更加高效的使用Glide提供的方式進(jìn)行綁定森枪,這樣可以更好的讓加載圖片的請(qǐng)求的生命周期動(dòng)態(tài)管理起來(lái)

Glide.with(Context context);//綁定ContextGlide.with(Activity activity);//綁定ActivityGlide.with(FragmentActivity activity);//綁定FragmentActivityGlide.with(Fragment fragment);//綁定Fragment

3. )簡(jiǎn)單的加載圖片實(shí)例

Glide.with(this).load(imageUrl).into(imageView);

4.)設(shè)置加載中以及加載失敗圖片

api里面對(duì)placeholder()、error()函數(shù)中有多態(tài)實(shí)現(xiàn) 用的時(shí)候可以具體的熟悉一下

Glide.with(this).load(imageUrl).placeholder(R.mipmap.ic_launcher).error(R.mipmap.ic_launcher).into(imageView);

5.)設(shè)置跳過內(nèi)存緩存

Glide.with(this).load(imageUrl).skipMemoryCache(true).into(imageView);

6.)設(shè)置下載優(yōu)先級(jí)

Glide.with(this).load(imageUrl).priority(Priority.NORMAL).into(imageView);

7.)設(shè)置緩存策略

Glide.with(this).load(imageUrl).diskCacheStrategy(DiskCacheStrategy.ALL).into(imageView);

策略解說:

all:緩存源資源和轉(zhuǎn)換后的資源

none:不作任何磁盤緩存

source:緩存源資源

result:緩存轉(zhuǎn)換后的資源

8.)設(shè)置加載動(dòng)畫

api也提供了幾個(gè)常用的動(dòng)畫:比如crossFade()

Glide.with(this).load(imageUrl).animate(R.anim.item_alpha_in).into(imageView);

R.anim.item_alpha_in

9.)設(shè)置縮略圖支持

這樣會(huì)先加載縮略圖 然后在加載全圖

Glide.with(this).load(imageUrl).thumbnail(0.1f).into(imageView);

10.)設(shè)置加載尺寸

Glide.with(this).load(imageUrl).override(800, 800).into(imageView);

11.)設(shè)置動(dòng)態(tài)轉(zhuǎn)換

Glide.with(this).load(imageUrl).centerCrop().into(imageView);

api提供了比如:centerCrop()、fitCenter()等函數(shù)也可以通過自定義Transformation式散,舉例說明:比如一個(gè)人圓角轉(zhuǎn)化器

publicclassGlideRoundTransformextendsBitmapTransformation {privatefloatradius =0f;publicGlideRoundTransform(Context context) {this(context, 4);

}publicGlideRoundTransform(Context context,intdp) {super(context);this.radius = Resources.getSystem().getDisplayMetrics().density *dp;

}

@OverrideprotectedBitmap transform(BitmapPool pool, Bitmap toTransform,intoutWidth,intoutHeight) {returnroundCrop(pool, toTransform);

}privateBitmap roundCrop(BitmapPool pool, Bitmap source) {if(source ==null)returnnull;

Bitmap result=pool.get(source.getWidth(), source.getHeight(), Bitmap.Config.ARGB_8888);if(result ==null) {

result=Bitmap.createBitmap(source.getWidth(), source.getHeight(), Bitmap.Config.ARGB_8888);

}

Canvas canvas=newCanvas(result);

Paint paint=newPaint();

paint.setShader(newBitmapShader(source, BitmapShader.TileMode.CLAMP, BitmapShader.TileMode.CLAMP));

paint.setAntiAlias(true);

RectF rectF=newRectF(0f, 0f, source.getWidth(), source.getHeight());

canvas.drawRoundRect(rectF, radius, radius, paint);returnresult;

}

@OverridepublicString getId() {returngetClass().getName() +Math.round(radius);

}

}

具體使用

Glide.with(this).load(imageUrl).transform(newGlideRoundTransform(this)).into(imageView);

12.)設(shè)置要加載的內(nèi)容

項(xiàng)目中有很多需要先下載圖片然后再做一些合成的功能杂数,比如項(xiàng)目中出現(xiàn)的圖文混排瘸洛,該如何實(shí)現(xiàn)目標(biāo)下

Glide.with(this).load(imageUrl).centerCrop().into(newSimpleTarget() {

@OverridepublicvoidonResourceReady(GlideDrawable resource, GlideAnimationglideAnimation) {

imageView.setImageDrawable(resource);

}

});

13 .)設(shè)置監(jiān)聽請(qǐng)求接口

Glide.with(this).load(imageUrl).listener(newRequestListener() {

@OverridepublicbooleanonException(Exception e, String model, Target target,booleanisFirstResource) {returnfalse;

}

@OverridepublicbooleanonResourceReady(GlideDrawable resource, String model, Target target,booleanisFromMemoryCache,booleanisFirstResource) {//imageView.setImageDrawable(resource);returnfalse;

}

}).into(imageView);

設(shè)置監(jiān)聽的用處 可以用于監(jiān)控請(qǐng)求發(fā)生錯(cuò)誤來(lái)源反肋,以及圖片來(lái)源 是內(nèi)存還是磁盤

15.)設(shè)置動(dòng)態(tài)GIF加載方式

Glide.with(this).load(imageUrl).asBitmap().into(imageView);//顯示gif靜態(tài)圖片Glide.with(this).load(imageUrl).asGif().into(imageView);//顯示gif動(dòng)態(tài)圖片

16.)緩存的動(dòng)態(tài)清理

Glide.get(this).clearDiskCache();//清理磁盤緩存 需要在子線程中執(zhí)行Glide.get(this).clearMemory();//清理內(nèi)存緩存? 可以在UI主線程中進(jìn)行

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市罕邀,隨后出現(xiàn)的幾起案子养距,更是在濱河造成了極大的恐慌,老刑警劉巖棍厌,帶你破解...
    沈念sama閱讀 210,978評(píng)論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異敬肚,居然都是意外死亡束析,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,954評(píng)論 2 384
  • 文/潘曉璐 我一進(jìn)店門弄慰,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人曹动,你說我怎么就攤上這事《袷兀” “怎么了贡必?”我有些...
    開封第一講書人閱讀 156,623評(píng)論 0 345
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)衫樊。 經(jīng)常有香客問我利花,道長(zhǎng),這世上最難降的妖魔是什么炒事? 我笑而不...
    開封第一講書人閱讀 56,324評(píng)論 1 282
  • 正文 為了忘掉前任,我火速辦了婚禮权薯,結(jié)果婚禮上睡扬,老公的妹妹穿的比我還像新娘。我一直安慰自己卖怜,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,390評(píng)論 5 384
  • 文/花漫 我一把揭開白布奄抽。 她就那樣靜靜地躺著虑粥,像睡著了一般。 火紅的嫁衣襯著肌膚如雪娩贷。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,741評(píng)論 1 289
  • 那天茁瘦,我揣著相機(jī)與錄音,去河邊找鬼圆恤。 笑死腔稀,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的焊虏。 我是一名探鬼主播,決...
    沈念sama閱讀 38,892評(píng)論 3 405
  • 文/蒼蘭香墨 我猛地睜開眼炼团,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼疏尿!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起褥琐,我...
    開封第一講書人閱讀 37,655評(píng)論 0 266
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤踩衩,失蹤者是張志新(化名)和其女友劉穎嚼鹉,沒想到半個(gè)月后驱富,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體匹舞,經(jīng)...
    沈念sama閱讀 44,104評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡赐稽,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,451評(píng)論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了晰绎。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片括丁。...
    茶點(diǎn)故事閱讀 38,569評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出仰税,到底是詐尸還是另有隱情抽诉,我是刑警寧澤,帶...
    沈念sama閱讀 34,254評(píng)論 4 328
  • 正文 年R本政府宣布迹淌,位于F島的核電站,受9級(jí)特大地震影響葵姥,放射性物質(zhì)發(fā)生泄漏句携。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,834評(píng)論 3 312
  • 文/蒙蒙 一矮嫉、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧拨齐,春花似錦昨寞、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,725評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)羽峰。三九已至添瓷,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間鳞贷,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,950評(píng)論 1 264
  • 我被黑心中介騙來(lái)泰國(guó)打工惰聂, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人庶近。 一個(gè)月前我還...
    沈念sama閱讀 46,260評(píng)論 2 360
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像反番,于是被迫代替她去往敵國(guó)和親叉钥。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,446評(píng)論 2 348

推薦閱讀更多精彩內(nèi)容

  • 一枫疆、簡(jiǎn)介 在泰國(guó)舉行的谷歌開發(fā)者論壇上敷鸦,谷歌為我們介紹了一個(gè)名叫Glide的圖片加載庫(kù),作者是bumptech扒披。這...
    天天大保建閱讀 7,459評(píng)論 2 28
  • Android圖片緩存之初識(shí)Glide 前言: 前面總結(jié)學(xué)習(xí)了圖片的使用以及Lru算法,今天來(lái)學(xué)習(xí)一下比較優(yōu)秀的圖...
    流水潺湲閱讀 796評(píng)論 1 14
  • 一愿险、Glide簡(jiǎn)介 Glide 是 Google 員工的開源項(xiàng)目价说, Google I/O上被推薦使用,一個(gè)高效鳖目、開...
    mVincent閱讀 1,337評(píng)論 0 0
  • 【我的感悟與反思】 以思無(wú)益不如學(xué)也。關(guān)于工作甫匹,總是瞻前顧后惦费,顧慮太多抢韭,容易陷入矛盾薪贫,不可自拔刻恭。今天效率不可謂不高...
    劉旭暉閱讀 620評(píng)論 0 0
  • 這是一個(gè)厭世之日 和黃埔大道上的農(nóng)夫車一起 咆哮著厭倦道路橋梁 樓房蹣跚 愁眉苦臉的珠江 懷疑主義者的煙頭 在這悶...
    小婦阿達(dá)閱讀 120評(píng)論 0 0