Glide

1.概述

剛才有說到见妒,有些朋友覺得Glide 4相對于Glide 3改動非常大,其實不然甸陌。之所以大家會有這種錯覺须揣,是因為你將Glide 3的用法直接搬到Glide 4中去使用,結果IDE全面報錯钱豁,然后大家可能就覺得Glide 4的用法完全變掉了返敬。

其實Glide 4相對于Glide 3的變動并不大,只是你還沒有了解它的變動規(guī)則而已寥院。一旦你掌握了Glide 4的變動規(guī)則之后劲赠,你會發(fā)現(xiàn)大多數(shù)Glide 3的用法放到Glide 4上都還是通用的。

我對Glide 4進行了一個大概的研究之后秸谢,發(fā)現(xiàn)Glide 4并不能算是有什么突破性的升級凛澎,而更多是一些API工整方面的優(yōu)化。相比于Glide 3的API估蹄,Glide 4進行了更加科學合理地調整塑煎,使得易讀性、易寫性臭蚁、可擴展性等方面都有了不錯的提升最铁。但如果你已經對Glide 3非常熟悉的話,并不是就必須要切換到Glide 4上來垮兑,因為Glide 4上能實現(xiàn)的功能Glide 3也都能實現(xiàn)冷尉,而且Glide 4在性能方面也并沒有什么提升。

但是對于新接觸Glide的朋友而言系枪,那就沒必要再去學習Glide 3了雀哨,直接上手Glide 4就是最佳的選擇了。

好了私爷,對Glide 4進行一個基本的概述之后雾棺,接下來我們就要正式開始學習它的用法了。剛才我已經說了衬浑,Glide 4的用法相對于Glide 3其實改動并不大捌浩。在前面的七篇文章中,我們已經學習了Glide 3的基本用法工秩、緩存機制尸饺、回調與監(jiān)聽宏榕、圖片變換、自定義模塊等用法侵佃,那么今天這篇文章的目標就很簡單了麻昼,就是要掌握如何在Glide 4上實現(xiàn)之前所學習過的所有功能,那么我們現(xiàn)在就開始吧馋辈。

2.使用

⑴依賴
implementation 'com.github.bumptech.glide:glide:4.9.0'
annotationProcessor 'com.github.bumptech.glide:compiler:4.9.0'
⑵加載圖片到imageView
Glide.with(context).load(url).into(iv);
⑶屬性
RequestOptions options = new RequestOptions()
                .circleCrop()//圓形圖片
                .placeholder(R.drawable.ic_launcher_background)//占位圖,在圖片加載回來之前,使用本地圖片占著位置
                .error(R.mipmap.ic_launcher)//加載圖片失敗的時候使用的圖片
                .override(300,300)//指定加載圖片的大小
                .diskCacheStrategy(DiskCacheStrategy.NONE)//sd卡的緩存,緩存策略
                .transform(new RoundedCorners(100))//圓角設置
                .transform(new BlurTransformation())//高斯模糊
                .transform(new GrayscaleTransformation());//黑白化處理
⑷into()方法

在init()使用SimpleTarget抚芦,可以將網絡鏈接變成一個Drawable

Glide.with(this).load(url).into(new SimpleTarget<Drawable>() {
            @Override
            public void onResourceReady(@NonNull Drawable resource, @Nullable Transition<? super Drawable> transition) {
                iv.setImageDrawable(resource);
            }
        });
⑸preload()方法
Glide.with(this)
     .load("http://guolin.tech/book.png")
     .preload();
⑹submit()方法
public void downloadImage() {
    new Thread(new Runnable() {
        @Override
        public void run() {
            try {
                String url = "http://www.guolin.tech/book.png";
                final Context context = getApplicationContext();
                FutureTarget<File> target = Glide.with(context)
                        .asFile()
                        .load(url)
                        .submit();
                final File imageFile = target.get();
                runOnUiThread(new Runnable() {
                    @Override
                    public void run() {
                        Toast.makeText(context, imageFile.getPath(), Toast.LENGTH_LONG).show();
                    }
                });
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }).start();
}
⑺listener()方法
Glide.with(this)
     .load("http://www.guolin.tech/book.png")
     .listener(new RequestListener<Drawable>() {
         @Override
         public boolean onLoadFailed(@Nullable GlideException e, Object model, Target<Drawable> target, boolean isFirstResource) {
             return false;
         }
         @Override
         public boolean onResourceReady(Drawable resource, Object model, Target<Drawable> target, DataSource dataSource, boolean isFirstResource) {
             return false;
         }
     })
     .into(imageView);
⑻自定義模塊

?原來3.x MyAppGlideModule這個類需要在清單文件配置,4.x 不需要,直接添加注解@GlideModule
?ExternalCacheDiskCacheFactory的默認緩存路徑是在sdcard/Android/data/包名/cache/我的圖片
?一般在SD卡讀寫權限需要動態(tài)申請權限迈螟,但是這里不需要處理權限叉抡,
因為Android/data/包名/cache/這個目錄google專門留出來,給各個app緩存數(shù)據(jù)

@GlideModule
public class MyAppGlideModule extends AppGlideModule {
    @Override
    public void applyOptions(Context context, GlideBuilder builder) {
        builder.setDiskCache(new ExternalPreferredCacheDiskCacheFactory(
                context,"我的圖片",1024*1024*500));
    }
    @Override
    public void registerComponents(Context context, Glide glide, Registry registry) {
    }
}
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末答毫,一起剝皮案震驚了整個濱河市褥民,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌洗搂,老刑警劉巖消返,帶你破解...
    沈念sama閱讀 216,997評論 6 502
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異耘拇,居然都是意外死亡撵颊,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,603評論 3 392
  • 文/潘曉璐 我一進店門惫叛,熙熙樓的掌柜王于貴愁眉苦臉地迎上來倡勇,“玉大人,你說我怎么就攤上這事嘉涌∑扌埽” “怎么了?”我有些...
    開封第一講書人閱讀 163,359評論 0 353
  • 文/不壞的土叔 我叫張陵仑最,是天一觀的道長扔役。 經常有香客問我,道長词身,這世上最難降的妖魔是什么厅目? 我笑而不...
    開封第一講書人閱讀 58,309評論 1 292
  • 正文 為了忘掉前任番枚,我火速辦了婚禮法严,結果婚禮上,老公的妹妹穿的比我還像新娘葫笼。我一直安慰自己深啤,他們只是感情好,可當我...
    茶點故事閱讀 67,346評論 6 390
  • 文/花漫 我一把揭開白布路星。 她就那樣靜靜地躺著溯街,像睡著了一般诱桂。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上呈昔,一...
    開封第一講書人閱讀 51,258評論 1 300
  • 那天挥等,我揣著相機與錄音,去河邊找鬼堤尾。 笑死肝劲,一個胖子當著我的面吹牛,可吹牛的內容都是我干的郭宝。 我是一名探鬼主播辞槐,決...
    沈念sama閱讀 40,122評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼粘室!你這毒婦竟也來了榄檬?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 38,970評論 0 275
  • 序言:老撾萬榮一對情侶失蹤衔统,失蹤者是張志新(化名)和其女友劉穎鹿榜,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體锦爵,經...
    沈念sama閱讀 45,403評論 1 313
  • 正文 獨居荒郊野嶺守林人離奇死亡犬缨,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,596評論 3 334
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了棉浸。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片怀薛。...
    茶點故事閱讀 39,769評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖迷郑,靈堂內的尸體忽然破棺而出枝恋,到底是詐尸還是另有隱情,我是刑警寧澤嗡害,帶...
    沈念sama閱讀 35,464評論 5 344
  • 正文 年R本政府宣布焚碌,位于F島的核電站,受9級特大地震影響霸妹,放射性物質發(fā)生泄漏十电。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,075評論 3 327
  • 文/蒙蒙 一叹螟、第九天 我趴在偏房一處隱蔽的房頂上張望鹃骂。 院中可真熱鬧,春花似錦罢绽、人聲如沸畏线。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,705評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽寝殴。三九已至蒿叠,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間蚣常,已是汗流浹背市咽。 一陣腳步聲響...
    開封第一講書人閱讀 32,848評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留抵蚊,地道東北人魂务。 一個月前我還...
    沈念sama閱讀 47,831評論 2 370
  • 正文 我出身青樓,卻偏偏與公主長得像泌射,于是被迫代替她去往敵國和親粘姜。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,678評論 2 354