Glide的使用

一拾弃、Glide簡介

Glide 是 Google 員工的開源項目, Google I/O上被推薦使用,一個高效锡足、開源纺棺、Android設備上的媒體管理框架,它遵循BSD柳刮、MIT以及Apache2.0協(xié)議發(fā)布。Glide具有獲取痒钝、解碼和展示視頻劇照秉颗、圖片、動畫等功能送矩,它還有靈活的API蚕甥,這些API使開發(fā)者能夠將Glide應用在幾乎任何網(wǎng)絡協(xié)議棧里。

二栋荸、Glide特點

1. 使用簡單

2. 可配置度高菇怀,自適應程度高

3. 支持常見圖片格式,jpg晌块、png爱沟、gif、webp

4. 支持多種數(shù)據(jù)源匆背,網(wǎng)絡呼伸、資源、assets 钝尸、File蜂大、Uri等

5. 高效緩存策略支持內存和硬盤緩存

6. 生命周期集成根據(jù)Activity/Fragment生命周期自動管理請求

7. 高效處理Bitmap

三、Android Studio導入依賴

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

四蝶怔、設置綁定生命周期

1. 綁定Context

Glide.with(Context context);

2. 綁定Activity

Glide.with(Activity activity);

3. 綁定FragmentActivity

Glide.with(FragmentActivity activity);

4. 綁定Fragment

Glide.with(Fragment fragment);

【注】將Activity/Fragment作為with()參數(shù)的好處是奶浦,圖片加載會和Activity/Fragment的生命周期保持一致,比如 Paused狀態(tài)在暫停加載踢星,在Resumed的時候又自動重新加載澳叉。

五、加載資源

1. 加載網(wǎng)絡資源

Glide.with(context).load("http://i.imgur.com/1opCuAV.jpg").into(imageView);

2. 加載assets資源

Glide.with(context).load("file:///android_asset/hb_head.png").into(imageView);

3. 加載Resources資源

Glide.with(context).load(R.mipmap.ic_launcher).into(imageView);

4. 加載File資源

Glide.with(context).load(file).into(imageView);

5. 加載Uri資源

Glide.with(context).load(uri).into(imageView);

6. 加載字節(jié)數(shù)組

Glide.with(context).load(byte[]).into(imageView);

六、設置加載中和加載失敗的圖片

設置加載中圖片

.placeholder(R.drawable.user_placeholder)

設置加載失敗圖片

.error(R.drawable.user_placeholder_error)

七成洗、設置縮略圖支持

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

【注】先加載縮略圖 然后在加載全圖

八五督、加載GIF

顯示gif靜態(tài)圖片

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

顯示gif動態(tài)圖片

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

九、設置加載動畫

1. 淡入淡出效果

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

2. 無動畫

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

3. 自定義動畫

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

十瓶殃、設置請求監(jiān)聽

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

十一充包、設置加載尺寸

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

centerCrop():拉伸截取中間部分顯示

fitCenter():等比拉伸填滿ImageView

十二、自定義圖片轉換

自定義BitmapTransformation

class RoundTransformation extends BitmapTransformation{

public RoundTransformation(Context context) {

super(context);

}

@Override

protected Bitmap transform(BitmapPool pool, Bitmap toTransform,

int outWidth, int outHeight) {

//根據(jù)需要遥椿,進行Bitmap轉換

Bitmap roteBmp = BitmapUtils.getRoundCornerBitmap(toTransform, 360);

if (roteBmp != toTransform) {

toTransform.recycle();

}

return roteBmp;

}

@Override

public String getId() {

return "glide";

}

}

設置圖片轉換

Glide.with(this).load(imageUrl)

.transform(newRoundTransformation(this))

.into(imageView);

十三基矮、緩存策略

1. 設置跳過內存緩存

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

2. 設置緩存策略

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

【注】

DiskCacheStrategy.ALL? 緩存源資源和轉換后的資源

DiskCacheStrategy.NONE? 不作任何磁盤緩存

DiskCacheStrategy.SOURCE? 緩存源資源

DiskCacheStrategy.RESULT? 緩存轉換后的資源

3. 清理緩存

清理磁盤緩存 需要在子線程中執(zhí)行

Glide.get(this).clearDiskCache();

清理內存緩存? 可以在UI主線程中進

Glide.get(this).clearMemory();

十四、自定義GlideModule

GlideModule 是一個抽象類冠场,用來全局改變 Glide 行為的一個方式家浇。通過全局GlideModule 配置Glide,其中用GlideBuilder設置選項碴裙。

GlideModule的使用步驟

1. 自定義一個GlideModule

public class MyGlideModule implements GlideModule {

@Override

public void applyOptions(Context context, GlideBuilder builder) {

// Apply options to the builder here.

}

@Override

public void registerComponents(Context context, Glide glide) {

// register ModelLoaders here.

}

}

2. AndroidManifest.xml注冊

android:name="com.bodhixu.glide.CustomGlideModule"

android:value="GlideModule"/>

3. 混淆處理

-keepnames class com.mypackage.MyGlideModule

#-keep public class * implements com.bumptech.glide.module.GlideModule

GlideBuilder設置選項

1. 獲取默認的內存

MemorySizeCalculator calculator = new MemorySizeCalculator(context);

int defaultMemoryCacheSize =calculator.getMemoryCacheSize(); //獲得默認內存緩存大小

int defaultBitmapPoolSize = calculator.getBitmapPoolSize(); //獲得bitmap緩存池大小

2. 設置BitmapPool緩存大小

int maxMemory = (int) Runtime.getRuntime().maxMemory();//獲取系統(tǒng)分配給應用的總內存大小

int memoryCacheSize = maxMemory /8;//設置圖片內存緩存占用八分之一//設置內存緩存大小

builder.setBitmapPool(newLruBitmapPool(memoryCacheSize));//設置BitmapPool緩存內存大小

3. 設置內存緩存大小

int maxMemory = (int) Runtime.getRuntime().maxMemory();//獲取系統(tǒng)分配給應用的總內存大小

int memoryCacheSize = maxMemory / 8;//設置圖片內存緩存占用八分之一//設置內存緩存大小

builder.setMemoryCache(new LruResourceCache(memoryCacheSize));

4. 設置Glide磁盤緩存大小

builder.setDiskCache(new InternalCacheDiskCacheFactory(context,10<<20)); //10M

builder.setDiskCache(new ExternalCacheDiskCacheFactory(context,10<<20));

5. 設置圖片解碼格式钢悲,默認是ARGB_565

builder.setDecodeFormat(DecodeFormat.PREFER_ARGB_8888);

十五、Picasso和Glide的區(qū)別

1. Glide比Picasso加載速度快

2. 默認情況Glide更有利于減少OutOfMemoryError的發(fā)生舔株,不過Picasso的圖片質量更高

3. Glide支持gif莺琳,Picasso不支持

十六、示例代碼

百度網(wǎng)盤:http://pan.baidu.com/s/1dFr7dgH

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末载慈,一起剝皮案震驚了整個濱河市芦昔,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌娃肿,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,839評論 6 482
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件珠十,死亡現(xiàn)場離奇詭異料扰,居然都是意外死亡,警方通過查閱死者的電腦和手機焙蹭,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,543評論 2 382
  • 文/潘曉璐 我一進店門晒杈,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人孔厉,你說我怎么就攤上這事拯钻。” “怎么了撰豺?”我有些...
    開封第一講書人閱讀 153,116評論 0 344
  • 文/不壞的土叔 我叫張陵粪般,是天一觀的道長。 經(jīng)常有香客問我污桦,道長亩歹,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,371評論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮小作,結果婚禮上亭姥,老公的妹妹穿的比我還像新娘。我一直安慰自己顾稀,他們只是感情好达罗,可當我...
    茶點故事閱讀 64,384評論 5 374
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著静秆,像睡著了一般粮揉。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上诡宗,一...
    開封第一講書人閱讀 49,111評論 1 285
  • 那天滔蝉,我揣著相機與錄音,去河邊找鬼塔沃。 笑死蝠引,一個胖子當著我的面吹牛,可吹牛的內容都是我干的蛀柴。 我是一名探鬼主播螃概,決...
    沈念sama閱讀 38,416評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼鸽疾!你這毒婦竟也來了吊洼?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 37,053評論 0 259
  • 序言:老撾萬榮一對情侶失蹤制肮,失蹤者是張志新(化名)和其女友劉穎冒窍,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體豺鼻,經(jīng)...
    沈念sama閱讀 43,558評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡综液,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 36,007評論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了儒飒。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片谬莹。...
    茶點故事閱讀 38,117評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖桩了,靈堂內的尸體忽然破棺而出附帽,到底是詐尸還是另有隱情,我是刑警寧澤井誉,帶...
    沈念sama閱讀 33,756評論 4 324
  • 正文 年R本政府宣布蕉扮,位于F島的核電站,受9級特大地震影響颗圣,放射性物質發(fā)生泄漏慢显。R本人自食惡果不足惜爪模,卻給世界環(huán)境...
    茶點故事閱讀 39,324評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望荚藻。 院中可真熱鬧屋灌,春花似錦、人聲如沸应狱。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,315評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽疾呻。三九已至除嘹,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間岸蜗,已是汗流浹背尉咕。 一陣腳步聲響...
    開封第一講書人閱讀 31,539評論 1 262
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留璃岳,地道東北人年缎。 一個月前我還...
    沈念sama閱讀 45,578評論 2 355
  • 正文 我出身青樓,卻偏偏與公主長得像铃慷,于是被迫代替她去往敵國和親单芜。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 42,877評論 2 345

推薦閱讀更多精彩內容