Android圖片加載框架:Glide的基本用法

一 Glide的基本用法:

聲明:本文是基于郭霖大神的CSDNAndroid圖片加載框架最全解析(一)践瓷,Glide的基本用法博客學(xué)習(xí),自己總結(jié)梅肤,方便后續(xù)學(xué)習(xí)使用豹休,原文鏈接戳此處郭霖大神CSDN

1.1添加依賴

目前,Glide最新的穩(wěn)定版本是3.7.0;在app/build.gradle文件當(dāng)中添加如下依賴

dependencies {
    compile 'com.github.bumptech.glide:glide:3.7.0'
}

Glide中加載網(wǎng)絡(luò)圖片需要用到網(wǎng)絡(luò)功能,因此你還得在AndroidManifest.xml中聲明一下網(wǎng)絡(luò)權(quán)限才行:

<uses-permission android:name="android.permission.INTERNET" />

二 基本使用

先看下效果圖:簡(jiǎn)單的加載一張圖片

image.png

2.1 xml中布局

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/activity_main"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context="com.aliang.glidedemo.MainActivity">
    <ImageView
        android:layout_width="match_parent"
        android:layout_height="240dp"
        android:src="@mipmap/ic_launcher"
        android:id="@+id/image"/>
</LinearLayout>

2.2 找到控件,設(shè)置圖片

ImageView img = (ImageView) findViewById(R.id.image);
    Glide.with(this)
         .load(R.drawable.meinv)
         .into(img);

一張本地的圖片已經(jīng)被成功加載筑舅,并且展示到ImageView上了
分析:調(diào)用Glide.with()方法用于創(chuàng)建一個(gè)加載圖片的實(shí)例。with()方法可以接受Context,Activity,Fragment,類型的參數(shù)陨舱。我們選擇的范圍非常廣翠拣,不管是在Activity還是Fragment中調(diào)用with()方法,都可以直接傳this游盲。如果調(diào)用的地方既不在Activity或者Fragment,我們可以獲取當(dāng)前應(yīng)用程序的ApplicationContext误墓,傳入到with()方法當(dāng)中。
注意
with()方法中傳入的實(shí)例會(huì)決定Glide加載圖片的生命周期益缎,如果傳入的是Activity或者Fragment的實(shí)例谜慌,那么當(dāng)這個(gè)Activity或Fragment被銷毀的時(shí)候,圖片加載也會(huì)停止莺奔。如果傳入的是ApplicationContext欣范,那么只有當(dāng)應(yīng)用程序被殺掉的時(shí)候,圖片加載才會(huì)停止令哟。

看下load()這個(gè)方法:
這個(gè)方法用于指定待加載的圖片資源恼琼。Glide支持加載各種各樣的圖片資源,包括網(wǎng)絡(luò)圖片屏富、本地圖片晴竞、應(yīng)用資源、二進(jìn)制流狠半、Uri對(duì)象等等噩死。因此load()方法也有很多個(gè)方法重載颤难,除了我們剛才使用的加載一個(gè)字符串網(wǎng)址之外,你還可以這樣使用load()方法:

// 加載本地圖片
File file = new File(getExternalCacheDir() + "/image.jpg");
Glide.with(this).load(file).into(imageView);
// 加載應(yīng)用資源
int resource = R.drawable.image;
Glide.with(this).load(resource).into(imageView);
// 加載二進(jìn)制流
byte[] image = getImageBytes();
Glide.with(this).load(image).into(imageView);
// 加載Uri對(duì)象
Uri imageUri = getImageUri();
Glide.with(this).load(imageUri).into(imageView);

最后看一下into()方法
這個(gè)方法就很簡(jiǎn)單了甜滨,我們希望讓圖片顯示在哪個(gè)ImageView上乐严,把這個(gè)ImageView的實(shí)例傳進(jìn)去就可以了。當(dāng)然衣摩,into()方法不僅僅是只能接收ImageView類型的參數(shù),還支持很多更豐富的用法捂敌。


Glide最基本的使用方式艾扮,其實(shí)就是關(guān)鍵的三步走:先with(),再load()占婉,最后into()泡嘴。


2.3 占位圖

占位圖就是指在圖片的加載過(guò)程中,我們先顯示一張臨時(shí)的圖片逆济,等圖片加載出來(lái)了再替換成要加載的圖片酌予。
圖片Url錯(cuò)誤時(shí),顯示占位圖(只是為了顯示占位圖)

ImageView img = (ImageView) findViewById(R.id.img);
        Glide.with(this)
                .load("wwww")
                .placeholder(R.drawable.test)
                .into(img);
    }
image.png

修改代碼如下:

 ImageView img = (ImageView) findViewById(R.id.img);
        Glide.with(this)
                .load(R.drawable.dog)
                .placeholder(R.drawable.test)
                .into(img);

成功后顯示load加載的圖片


image.png

就是這么簡(jiǎn)單。我們只是在剛才的三步走之間插入了一個(gè)placeholder()方法奖慌,然后將占位圖片的資源id傳入到這個(gè)方法中即可抛虫。另外,這個(gè)占位圖的用法其實(shí)也演示了Glide當(dāng)中絕大多數(shù)API的用法简僧,其實(shí)就是在load()和into()方法之間串接任意想添加的功能就可以了建椰。

當(dāng)然,這只是占位圖的一種岛马,除了這種加載占位圖之外棉姐,還有一種異常占位圖。異常占位圖就是指啦逆,如果因?yàn)槟承┊惓G闆r導(dǎo)致圖片加載失敗伞矩,比如說(shuō)手機(jī)網(wǎng)絡(luò)信號(hào)不好,這個(gè)時(shí)候就顯示這張異常占位圖夏志。

 ImageView img = (ImageView) findViewById(R.id.img);
        Glide.with(this)
                .load("www")
                .placeholder(R.drawable.test)
                .error(R.drawable.error)
                .into(img);

串接了一個(gè)error()方法就可以指定異常占位圖了乃坤。
顯示如下:


image.png

這樣我們就把Glide提供的占位圖功能都掌握了

2.4 指定圖片格式

Glide另外一個(gè)強(qiáng)大的功能,那就是Glide是支持加載GIF圖片的
Glide加載GIF圖并不需要編寫什么額外的代碼盲镶,Glide內(nèi)部會(huì)自動(dòng)判斷圖片格式侥袜。比如這是一張GIF圖片的URL地址:

http://p1.pstatp.com/large/166200019850062839d3

只需要將剛才那段加載圖片代碼中的URL地址替換成上面的地址就可以了,運(yùn)行后結(jié)果:


demo.gif

也就是說(shuō),不管我們傳入的是一張普通圖片溉贿,還是一張GIF圖片枫吧,Glide都會(huì)自動(dòng)進(jìn)行判斷,并且可以正確地把它解析并展示出來(lái)宇色。
指定圖片的格式該怎么辦呢九杂?就比如說(shuō)颁湖,我希望加載的這張圖必須是一張靜態(tài)圖片,我不需要Glide自動(dòng)幫我判斷它到底是靜圖還是GIF圖例隆。

想實(shí)現(xiàn)這個(gè)功能仍然非常簡(jiǎn)單甥捺,我們只需要再串接一個(gè)新的方法就可以了,如下所示:

Glide.with(this)
                .load(R.drawable.dynamic)
                .asBitmap()
                .into(img);

在load()方法的后面加入了一個(gè)asBitmap()方法镀层,這個(gè)方法的意思就是說(shuō)這里只允許加載靜態(tài)圖片镰禾,不需要Glide去幫我們自動(dòng)進(jìn)行圖片格式的判斷了。
運(yùn)行程序唱逢,結(jié)果如下


圖片.png

調(diào)用了asBitmap()方法吴侦,現(xiàn)在GIF圖就無(wú)法正常播放了,而是會(huì)在界面上顯示第一幀的圖片坞古。

類似地备韧,我們能強(qiáng)制指定加載靜態(tài)圖片,就也能強(qiáng)制指定加載動(dòng)態(tài)圖片痪枫。比如說(shuō)我們想要實(shí)現(xiàn)必須加載動(dòng)態(tài)圖片的功能织堂,就可以這樣寫:

Glide.with(this)
              .load(R.drawable.dynamic)
              .asGif()
              .into(img)

如果指定了只能加載動(dòng)態(tài)圖片,而傳入的圖片卻是一張靜圖的話奶陈,那么結(jié)果自然就只有加載失敗.

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末易阳,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子尿瞭,更是在濱河造成了極大的恐慌闽烙,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,311評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件声搁,死亡現(xiàn)場(chǎng)離奇詭異黑竞,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)疏旨,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,339評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門很魂,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人檐涝,你說(shuō)我怎么就攤上這事遏匆。” “怎么了谁榜?”我有些...
    開封第一講書人閱讀 152,671評(píng)論 0 342
  • 文/不壞的土叔 我叫張陵幅聘,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我窃植,道長(zhǎng)帝蒿,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,252評(píng)論 1 279
  • 正文 為了忘掉前任巷怜,我火速辦了婚禮葛超,結(jié)果婚禮上暴氏,老公的妹妹穿的比我還像新娘。我一直安慰自己绣张,他們只是感情好答渔,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,253評(píng)論 5 371
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著侥涵,像睡著了一般沼撕。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上独令,一...
    開封第一講書人閱讀 49,031評(píng)論 1 285
  • 那天端朵,我揣著相機(jī)與錄音,去河邊找鬼燃箭。 笑死,一個(gè)胖子當(dāng)著我的面吹牛舍败,可吹牛的內(nèi)容都是我干的招狸。 我是一名探鬼主播,決...
    沈念sama閱讀 38,340評(píng)論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼邻薯,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼裙戏!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起厕诡,我...
    開封第一講書人閱讀 36,973評(píng)論 0 259
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤累榜,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后灵嫌,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體壹罚,經(jīng)...
    沈念sama閱讀 43,466評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,937評(píng)論 2 323
  • 正文 我和宋清朗相戀三年寿羞,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了猖凛。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,039評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡绪穆,死狀恐怖辨泳,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情玖院,我是刑警寧澤菠红,帶...
    沈念sama閱讀 33,701評(píng)論 4 323
  • 正文 年R本政府宣布,位于F島的核電站难菌,受9級(jí)特大地震影響试溯,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜扔傅,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,254評(píng)論 3 307
  • 文/蒙蒙 一耍共、第九天 我趴在偏房一處隱蔽的房頂上張望烫饼。 院中可真熱鬧,春花似錦试读、人聲如沸杠纵。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,259評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)比藻。三九已至,卻和暖如春倘屹,著一層夾襖步出監(jiān)牢的瞬間银亲,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,485評(píng)論 1 262
  • 我被黑心中介騙來(lái)泰國(guó)打工纽匙, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留务蝠,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 45,497評(píng)論 2 354
  • 正文 我出身青樓烛缔,卻偏偏與公主長(zhǎng)得像馏段,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子践瓷,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,786評(píng)論 2 345

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