Glide試講

導(dǎo)入

  • 我們每開發(fā)一個APP凰狞,基本都是顯示文字與展示圖片,圖片加載肯定不需要大家自己封裝沛慢,市場流行的圖片加載框架有Glide赡若、Picasso、Fresco团甲,每個框架都很優(yōu)秀逾冬,但是合不合腳只有我們自己知道,我比較喜歡用Glide伐庭。我們今天課程的主要內(nèi)容是glide的學(xué)習(xí)粉渠,課程結(jié)束后大家會掌握隨意處理圖片了,比如模糊圾另、圓角霸株、黑白、大小等集乔。

一.簡介

  • Glide(讀音糾正)去件,一個被google所推薦的圖片加載庫坡椒,作者是bumptech。這個庫被廣泛運(yùn)用在google的開源項(xiàng)目中尤溜,包括2014年的google I/O大會上發(fā)布的官方app倔叼。(PS:眾所周知的簡介就到此為止了)

  • Glide 對于 Android SDK 的最低要求是 API level 10

  • Glide滑行的意思,可以看出這個庫的主旨就在于讓圖片加載變的流暢」常現(xiàn)在被廣泛使用丈攒,當(dāng)然還是有很多開發(fā)者使用Square公司的picasso.

二.使用

添加依賴:

implementation 'com.github.bumptech.glide:glide:3.8.0'

添加網(wǎng)絡(luò)權(quán)限:

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

1、加載圖片到imageView

Glide.with(Context context).load(Strint url).into(ImageView imageView);

2授霸、各種形式的圖片加載到ImageView

// 加載本地圖片
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對象
Uri imageUri = getImageUri();
Glide.with(this).load(imageUri).into(imageView);

3巡验、加載帶有占位圖

Glide.with(this).load(url).placeholder(R.drawable.loading).into(imageView);

占位圖目的為在目的圖片還未加載出來的時候,提前展示給用戶的一張圖片碘耳;

4显设、加載失敗 放置占位符

Glide.with(this).load(url)
.placeholder(R.drawable.loading)
.error(R.drawable.error)
.diskCacheStrategy(DiskCacheStrategy.NONE)//關(guān)閉Glide的硬盤緩存機(jī)制
.into(imageView);

//DiskCacheStrategy.NONE: 表示不緩存任何內(nèi)容。
//DiskCacheStrategy.SOURCE: 表示只緩存原始圖片辛辨。
//DiskCacheStrategy.RESULT: 表示只緩存轉(zhuǎn)換過后的圖片(默認(rèn)選項(xiàng))捕捂。
//DiskCacheStrategy.ALL : 表示既緩存原始圖片,也緩存轉(zhuǎn)換過后的圖片斗搞。

5指攒、加載指定格式的圖片--指定為靜止圖片

Glide.with(this)
 .load(url)
 .asBitmap()//只加載靜態(tài)圖片,如果是gif圖片則只加載第一幀榜旦。
 .placeholder(R.drawable.loading)
 .error(R.drawable.error)
 .diskCacheStrategy(DiskCacheStrategy.NONE)
 .into(imageView);

6幽七、加載動態(tài)圖片

Glide.with(this)
.load(url)
.asGif()//加載動態(tài)圖片景殷,若現(xiàn)有圖片為非gif圖片溅呢,則直接加載錯誤占位圖。
.placeholder(R.drawable.loading)
.error(R.drawable.error)
.diskCacheStrategy(DiskCacheStrategy.NONE)
.into(imageView);

7猿挚、加載指定大小的圖片

Glide.with(this)
.load(url)
.placeholder(R.drawable.loading)
.error(R.drawable.error)
.diskCacheStrategy(DiskCacheStrategy.NONE)
.override(100, 100)//指定圖片大小
.into(imageView);

8咐旧、關(guān)閉框架的內(nèi)存緩存機(jī)制

Glide.with(this)
.load(url)
.skipMemoryCache(true)  //傳入?yún)?shù)為true時,則關(guān)閉內(nèi)存緩存绩蜻。
.into(imageView);

9铣墨、利用Glide將圖片加載到不同控件或加載成不同使用方式

//1、通過自己構(gòu)造 target 可以獲取到圖片實(shí)例
SimpleTarget<GlideDrawable> simpleTarget = new SimpleTarget<GlideDrawable>() {
    @Override
    public void onResourceReady(GlideDrawable resource, GlideAnimation glideAnimation) {
        imageView.setImageDrawable(resource);
    }
};

//2办绝、將圖片實(shí)例記載到指定的imageview上伊约,也可以做其他的事情
public void loadImage(View view) {
    String url = "http://cn.bing.com/az/hprichbg/rb/TOAD_ZH-CN7336795473_1920x1080.jpg";
    Glide.with(this)
         .load(url)
         .into(simpleTarget);
}

10、Glide 實(shí)現(xiàn)預(yù)加載
希望提前對圖片進(jìn)行一個預(yù)加載孕蝉,等真正需要加載圖片的時候就直接從緩存中讀取屡律,不想再等待慢長的網(wǎng)絡(luò)加載時間

//a、預(yù)加載代碼
Glide.with(this)
     .load(url)
     .diskCacheStrategy(DiskCacheStrategy.SOURCE)
     .preload();

//preload() 有兩種重載
 // 1降淮、帶有參數(shù)的重載,參數(shù)作用是設(shè)置預(yù)加載的圖片大谐瘛;
//2、不帶參數(shù)的表示加載的圖片為原始尺寸霍殴;

//b媒惕、使用預(yù)加載的圖片
Glide.with(this)
     .load(url)
     .diskCacheStrategy(DiskCacheStrategy.SOURCE)
     .into(imageView);

切記:diskCacheStrategy() 方法內(nèi)必須設(shè)置參數(shù)為:“ DiskCacheStrategy.SOURCE ”,否則可能預(yù)加載失敗来庭,導(dǎo)致顯示圖片時妒蔚,需要重新加載。

11月弛、Glide 實(shí)現(xiàn)圖片下載
使用 downloadOnly(int width, int height) 或 downloadOnly(Y target) 方法替代 into(view) 方法面睛。

private void downImageByGlide() {
        new Thread(new Runnable() {
            @Override
            public void run() {
                final FutureTarget<File> fileFutureTarget = Glide.with(MainActivity.this)
                        .load(Constant.imageUrl)
                        .downloadOnly(Target.SIZE_ORIGINAL, Target.SIZE_ORIGINAL);
                try {
                    final String path = fileFutureTarget.get().getPath();
                    runOnUiThread(new Runnable() {
                        @Override
                        public void run() {
                            Glide.with(MainActivity.this)
                                    .load(new File(path))
                                    .into(imageview);
                        }
                    });

                    Log.e("TAG", "path" + path);
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        }).start();
    }

(1)、有兩個參數(shù)的 downloadOnly(int width, int height) 方法表示指定下載尺寸尊搬,用于在子線程內(nèi)進(jìn)行下載叁鉴;
(2)、target.get() 方法可以獲取到下載文件保存路徑,如果未下載ok,方法就會阻塞住佛寿,一直等到圖片下載完成才會有值返回幌墓;

注意: diskCacheStrategy() 方法的參數(shù)應(yīng)該為 DiskCacheStrategy.SOURCE 或者 DiskCacheStrategy.ALL否則可能導(dǎo)致加載圖片到控件的時候,需要重新加載冀泻。

12、監(jiān)聽 Glide 加載的狀態(tài)--它可以用來監(jiān)聽Glide加載圖片的狀態(tài)

public void loadImage(View view) {
    String url = "http://cn.bing.com/az/hprichbg/rb/TOAD_ZH-CN7336795473_1920x1080.jpg";
    Glide.with(this)
            .load(url)
            .listener(new RequestListener<String, GlideDrawable>() {
                @Override
                public boolean onException(Exception e, String model, Target<GlideDrawable> target,
                    boolean isFirstResource) {
                    return false;
                }

                @Override
                public boolean onResourceReady(GlideDrawable resource, String model,
                    Target<GlideDrawable> target, boolean isFromMemoryCache, boolean isFirstResource) {
                    return false;
                }
            })
            .into(imageView);
}

(1)弹渔、onException() 方法表示加載失敗胳施,onResourceReady() 表示加載成功;
(2)肢专、 每個方法都有一個 boolean 的返回值舞肆,false表示未處理、true 表示處理博杖。

13椿胯、Glide 的圖形變換功能
(1)、禁用圖形變換功能

Glide.with(this)
     .load(url)
     .dontTransform()
     .into(imageView);

這個方法時全局的剃根,導(dǎo)致其他地方的圖片也不可進(jìn)行圖形變換了哩盲。

修改方法

Glide.with(this)
     .load(url)
     .override(Target.SIZE_ORIGINAL, Target.SIZE_ORIGINAL)
     .into(imageView);

通過 override() 方法設(shè)置大小

(2)、簡單的圖形變換

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

Glide.with(this)
     .load(url)
     .fitCenter()
     .into(imageView);
  • centerCrop()方法 :等比例縮放圖片狈醉,直到圖片的寬高都大于等于ImageView的寬度廉油,然后截取中間的顯示
  • fitCenter() 方法: 等比例縮放圖片,寬或者是高等于ImageView的寬或者是高

(3)苗傅、override() 方法與 centerCrop() 方法配合使用

String url = "http://cn.bing.com/az/hprichbg/rb/AvalancheCreek_ROW11173354624_1920x1080.jpg";
Glide.with(this)
     .load(url)
     .override(500, 500)
     .centerCrop()
     .into(imageView);

(4)抒线、復(fù)雜的圖像變換
首先需要再引入一個 第三方框架

dependencies {
    implementation 'jp.wasabeef:glide-transformations:4.0.0'
    // If you want to use the GPU Filters
    implementation 'jp.co.cyberagent.android.gpuimage:gpuimage-library:1.4.1'
}

部分樣例:
圖片虛化

Glide.with(this)
     .load(url)
     .bitmapTransform(new BlurTransformation(this))
     .into(imageView);

圖片黑白化

Glide.with(this)
     .load(url)
     .bitmapTransform(new GrayscaleTransformation(this))
     .into(imageView);

多個屬性同時使用

Glide.with(this)
     .load(url)
     .bitmapTransform(new BlurTransformation(this), new GrayscaleTransformation(this))
     .into(imageView);

還有更多的好玩的屬性金吗,請到框架官網(wǎng)查看:https://github.com/wasabeef/glide-transformations

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末十兢,一起剝皮案震驚了整個濱河市趣竣,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌旱物,老刑警劉巖遥缕,帶你破解...
    沈念sama閱讀 221,198評論 6 514
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異宵呛,居然都是意外死亡单匣,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,334評論 3 398
  • 文/潘曉璐 我一進(jìn)店門宝穗,熙熙樓的掌柜王于貴愁眉苦臉地迎上來户秤,“玉大人,你說我怎么就攤上這事逮矛〖牛” “怎么了?”我有些...
    開封第一講書人閱讀 167,643評論 0 360
  • 文/不壞的土叔 我叫張陵须鼎,是天一觀的道長鲸伴。 經(jīng)常有香客問我,道長晋控,這世上最難降的妖魔是什么汞窗? 我笑而不...
    開封第一講書人閱讀 59,495評論 1 296
  • 正文 為了忘掉前任,我火速辦了婚禮赡译,結(jié)果婚禮上仲吏,老公的妹妹穿的比我還像新娘。我一直安慰自己蝌焚,他們只是感情好裹唆,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,502評論 6 397
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著综看,像睡著了一般品腹。 火紅的嫁衣襯著肌膚如雪岖食。 梳的紋絲不亂的頭發(fā)上红碑,一...
    開封第一講書人閱讀 52,156評論 1 308
  • 那天,我揣著相機(jī)與錄音泡垃,去河邊找鬼析珊。 笑死,一個胖子當(dāng)著我的面吹牛蔑穴,可吹牛的內(nèi)容都是我干的忠寻。 我是一名探鬼主播,決...
    沈念sama閱讀 40,743評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼存和,長吁一口氣:“原來是場噩夢啊……” “哼奕剃!你這毒婦竟也來了衷旅?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,659評論 0 276
  • 序言:老撾萬榮一對情侶失蹤纵朋,失蹤者是張志新(化名)和其女友劉穎柿顶,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體操软,經(jīng)...
    沈念sama閱讀 46,200評論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡嘁锯,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,282評論 3 340
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了聂薪。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片家乘。...
    茶點(diǎn)故事閱讀 40,424評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖藏澳,靈堂內(nèi)的尸體忽然破棺而出仁锯,到底是詐尸還是另有隱情,我是刑警寧澤翔悠,帶...
    沈念sama閱讀 36,107評論 5 349
  • 正文 年R本政府宣布扑馁,位于F島的核電站,受9級特大地震影響凉驻,放射性物質(zhì)發(fā)生泄漏腻要。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,789評論 3 333
  • 文/蒙蒙 一涝登、第九天 我趴在偏房一處隱蔽的房頂上張望雄家。 院中可真熱鬧,春花似錦胀滚、人聲如沸趟济。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,264評論 0 23
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽顷编。三九已至,卻和暖如春剑刑,著一層夾襖步出監(jiān)牢的瞬間媳纬,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,390評論 1 271
  • 我被黑心中介騙來泰國打工施掏, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留钮惠,地道東北人。 一個月前我還...
    沈念sama閱讀 48,798評論 3 376
  • 正文 我出身青樓七芭,卻偏偏與公主長得像素挽,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子狸驳,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,435評論 2 359

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

  • 一预明、簡介 在泰國舉行的谷歌開發(fā)者論壇上缩赛,谷歌為我們介紹了一個名叫Glide的圖片加載庫,作者是bumptech撰糠。這...
    天天大保建閱讀 7,488評論 2 28
  • Glide筆記 一峦筒、簡介 在泰國舉行的谷歌開發(fā)者論壇上,谷歌為我們介紹了一個名叫Glide的圖片加載庫窗慎,作者是bu...
    AndroidMaster閱讀 3,910評論 0 27
  • 目前市場上的圖片異步請求框架有很多物喷,比如Volley,Fresco,Glide,Picasso等,之前項(xiàng)目中用的一...
    junjunxx閱讀 1,149評論 1 8
  • 昨夜夢得深沉遮斥,回到了老宅峦失。老房子已經(jīng)夷為平地了,阿爸阿媽給我留的那幢二層小樓孤獨(dú)地佇立著术吗,院子里所有的花草樹木都沒...
    木春閱讀 473評論 2 3
  • 時光只有在行進(jìn)的車中才能體會更深 人在時光里穿行的真實(shí)感尉辑、渺茫感。较屿。隧魄。 每每坐在行駛的車?yán)铮瑯O速而過的車窗外風(fēng)景不...
    f66cbac67a4a閱讀 199評論 0 1