Android圖片加載框架——Glide

Glide使用教程

Glide是一個(gè)快速有效的開(kāi)源圖像加載框架,可實(shí)現(xiàn)內(nèi)存緩存帆竹、磁盤緩存捌议,完成對(duì)圖片資源的加載,匯集成一個(gè)簡(jiǎn)單且易于使用的界面钠乏。

Glide使用步驟:
  • gradle中添加依賴代箭,或?qū)雑ar包辕录。這里使用的是版本3.7.0。

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

    由于使用Glide時(shí)會(huì)訪問(wèn)網(wǎng)絡(luò)梢卸,因此在AndroidManifest中需要聲明網(wǎng)絡(luò)權(quán)限。

    <uses-permission android:name="android.permission.INTERNET" /> 
    
  • 加載圖片

      Glide.with(this)
              .load(imageUrl)                     //路徑支持png,jpg,gif,mp4
              .asBitmap()                         //指定加載圖片格式副女,僅加載靜態(tài)圖片蛤高,或是顯示動(dòng)圖的第一幀的圖片
              //.asGif()                          //僅加載動(dòng)圖
              .placeholder(R.mipmap.ic_launcher)  //預(yù)加載圖片,占位圖
              .error(R.mipmap.ic_launcher)        //加載url失敗時(shí)顯示的圖片
              .animate(animationObject)           //漸變動(dòng)畫
    
              .crossFade()                        //淡入淡出動(dòng)畫效果
              //.dontAnimate()                      //移除動(dòng)畫
              .centerCrop()                       //等比例縮放圖片
              .skipMemoryCache(true)              //禁止內(nèi)存緩存
              .diskCacheStrategy(DiskCacheStrategy.NONE) //禁止磁盤緩存
        
              .priority(Priority.HIGH)            //指定優(yōu)先級(jí),優(yōu)先加載
              .thumbnail(0.5f)                    //利用原圖的一半作為縮略圖
              .override(100,100)                  //重新設(shè)置寬高戴陡,單位為 px
              
              //先添加依賴  compile 'jp.wasabeef:glide-transformations:2.0.0'
              .bitmapTransform(new CropCircleTransformation(this))  //圓形處理
            //.bitmapTransform(new RoundedCornersTransformation(this,30,0, RoundedCornersTransformation.CornerType.ALL))//圓角處理
              .into(imageView);                   //指定控件的實(shí)例
    

屬性說(shuō)明:

  • with():用于創(chuàng)建一個(gè)加載圖片的實(shí)例塞绿。可以接收Context恤批、Activity或者Fragment類型的參數(shù)异吻,實(shí)例會(huì)決定Glide加載圖片的生命周期,因此需要清楚傳入的實(shí)例是Activity或Fragment的喜庞,還是Application的诀浪,圖片加載停止的時(shí)間與之生命周期相關(guān)。

  • load():指定待加載的圖片資源延都。圖片資源包括網(wǎng)絡(luò)圖片雷猪、本地圖片、應(yīng)用資源晰房、二進(jìn)制流求摇、Uri對(duì)象等。使用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);
    
    // 加載本地視頻
    File filePath = new File("/storage/emulated/0/Pictures/example_video.mp4");
    Glide.with(this).load(Uri.fromFile(filePath)).into(imageView);
    
  • diskCacheStrategy():磁盤緩存殊者,其中有四種緩存策略可供選擇与境,對(duì)于download only操作要使用DiskCacheStrategy.SOURCE。
    分別為:

    DiskCacheStrategy.SOURCE:緩存原始數(shù)據(jù)猖吴,默認(rèn)選擇摔刁;
    DiskCacheStrategy.RESULT:緩存變換(如縮放、裁剪等)后的資源數(shù)據(jù)距误;
    DiskCacheStrategy.NONE:什么都不緩存簸搞;
    DiskCacheStrategy.ALL:緩存SOURC和RESULT。
    
  • centerCrop():圖片的縮放准潭。centerCrop()將會(huì)使圖片填充(拉伸)ImageView設(shè)置的大小趁俊。而fitCenter()即縮放圖像,讓圖像都測(cè)量出來(lái)等于或小于 ImageView 的邊界范圍,該圖像將完全顯示刑然,但可能不會(huì)填滿整個(gè)ImageView寺擂。

  • priority():指定加載的優(yōu)先級(jí),優(yōu)先級(jí)越高越優(yōu)先加載泼掠,但不保證所有圖片都按序加載怔软。優(yōu)先級(jí)等級(jí)有Priority.IMMEDIATE,Priority.HIGH择镇,Priority.NORMAL挡逼,Priority.LOW,默認(rèn)為Priority.NORMAL腻豌。

  • thumbnail(sizeMultiplier):請(qǐng)求給定系數(shù)的縮略圖家坎。如果縮略圖比全尺寸圖先加載完嘱能,就顯示縮略圖,否則就不顯示虱疏。系數(shù)sizeMultiplier必須在(0,1)之間惹骂,可以遞歸調(diào)用該方法。

  • override():指定圖片的尺寸做瞪,減少內(nèi)存浪費(fèi)对粪。
    比如圖片的尺寸是10001000像素,但界面上的ImageView可能只有200200像素装蓬,這時(shí)如果不對(duì)圖片進(jìn)行任何壓縮就直接讀取到內(nèi)存中著拭,這就屬于內(nèi)存浪費(fèi)了,因?yàn)槌绦蛑懈揪陀貌坏竭@么高像素的圖片矛物。

  • Glide.clear():可清除掉所有的圖片加載請(qǐng)求茫死。

  • glide-transformations:glide-transformations一個(gè)基于Glide的transformation庫(kù),擁有裁剪履羞,著色峦萎,模糊,濾鏡等多種轉(zhuǎn)換效果忆首。

在磁盤緩存方面爱榔,Picasso 只會(huì)緩存原始尺寸的圖片,而 Glide 緩存的是多種規(guī)格糙及,也就意味著 Glide 會(huì)根據(jù)你 ImageView 的大小來(lái)緩存相應(yīng)大小的圖片尺寸详幽,比如你ImageView 大小是200^200,原圖是 400^400 浸锨,而使用 Glide 就會(huì)緩存 200^200 規(guī)格的圖唇聘,而 Picasso 只會(huì)緩存 400^400 規(guī)格的。這個(gè)改進(jìn)就會(huì)導(dǎo)致 Glide 比 Picasso 加載的速度要快柱搜,畢竟少了每次裁剪重新渲染的過(guò)程迟郎。

Glide優(yōu)點(diǎn)
  • 圖片緩存->媒體緩存
    Glide 不僅是一個(gè)圖片緩存,它支持 Gif聪蘸、WebP宪肖、縮略圖。甚至是 Video健爬,所以更該當(dāng)做一個(gè)媒體緩存控乾。

  • 支持優(yōu)先級(jí)處理

  • 與 Activity/Fragment 生命周期一致,支持 trimMemory
    Glide 對(duì)每個(gè) context 都保持一個(gè) RequestManager娜遵,通過(guò) FragmentTransaction 保持與 Activity/Fragment 生命周期一致蜕衡,并且有對(duì)應(yīng)的 trimMemory 接口實(shí)現(xiàn)可供調(diào)用。

  • 支持 okhttp设拟、Volley
    Glide 默認(rèn)通過(guò) UrlConnection 獲取數(shù)據(jù)衷咽,可以配合 okhttp 或是 Volley 使用鸽扁。實(shí)際 ImageLoader、Picasso 也都支持 okhttp镶骗、Volley。

  • 內(nèi)存友好
    ① Glide 的內(nèi)存緩存有個(gè) active 的設(shè)計(jì)
    從內(nèi)存緩存中取數(shù)據(jù)時(shí)躲雅,不像一般的實(shí)現(xiàn)用 get鼎姊,而是用 remove,再將這個(gè)緩存數(shù)據(jù)放到一個(gè) value 為軟引用的 activeResources map 中相赁,并計(jì)數(shù)引用數(shù)相寇,在圖片加載完成后進(jìn)行判斷,如果引用計(jì)數(shù)為空則回收掉钮科。
    ② 內(nèi)存緩存更小圖片
    Glide 以 url唤衫、viewwidth、viewheight绵脯、屏幕的分辨率等做為聯(lián)合 key佳励,將處理后的圖片緩存在內(nèi)存緩存中,而不是原始圖片以節(jié)省大小蛆挫。
    ③ 與 Activity/Fragment 生命周期一致赃承,支持 trimMemory
    ④ 圖片默認(rèn)的 Bitmap格式為 RGB_565 而不是 ARGB_888
    雖然清晰度差些,但圖片更小悴侵,內(nèi)存開(kāi)銷小一半瞧剖,也可配置到 ARGB_888。

  • Glide 可以通過(guò) signature 或不使用本地緩存支持 url 過(guò)期可免。

本文主要是通過(guò)查找網(wǎng)上資源和自己的實(shí)際使用抓于,總結(jié)的關(guān)于Glide的使用教程。若是發(fā)現(xiàn)文章中存在不當(dāng)或有誤的地方浇借,希望看到的朋友可以指正捉撮,非常感謝!

資料鏈接:
Android圖片加載框架最全解析(二)逮刨,從源碼的角度理解Glide的執(zhí)行流程(郭霖)
Android圖片加載框架之Glide(簡(jiǎn)書)
Google推薦的圖片加載庫(kù)Glide介紹(泡在網(wǎng)上的日子)
Glide - 開(kāi)始呕缭!(MrFu Blog)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市修己,隨后出現(xiàn)的幾起案子恢总,更是在濱河造成了極大的恐慌,老刑警劉巖睬愤,帶你破解...
    沈念sama閱讀 221,273評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件片仿,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡尤辱,警方通過(guò)查閱死者的電腦和手機(jī)砂豌,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,349評(píng)論 3 398
  • 文/潘曉璐 我一進(jìn)店門厢岂,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人阳距,你說(shuō)我怎么就攤上這事塔粒。” “怎么了筐摘?”我有些...
    開(kāi)封第一講書人閱讀 167,709評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵卒茬,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我咖熟,道長(zhǎng)圃酵,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書人閱讀 59,520評(píng)論 1 296
  • 正文 為了忘掉前任馍管,我火速辦了婚禮郭赐,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘确沸。我一直安慰自己捌锭,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,515評(píng)論 6 397
  • 文/花漫 我一把揭開(kāi)白布张惹。 她就那樣靜靜地躺著舀锨,像睡著了一般。 火紅的嫁衣襯著肌膚如雪宛逗。 梳的紋絲不亂的頭發(fā)上坎匿,一...
    開(kāi)封第一講書人閱讀 52,158評(píng)論 1 308
  • 那天,我揣著相機(jī)與錄音雷激,去河邊找鬼替蔬。 笑死,一個(gè)胖子當(dāng)著我的面吹牛屎暇,可吹牛的內(nèi)容都是我干的承桥。 我是一名探鬼主播,決...
    沈念sama閱讀 40,755評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼根悼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼凶异!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起挤巡,我...
    開(kāi)封第一講書人閱讀 39,660評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤剩彬,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后矿卑,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體喉恋,經(jīng)...
    沈念sama閱讀 46,203評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,287評(píng)論 3 340
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了轻黑。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片糊肤。...
    茶點(diǎn)故事閱讀 40,427評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖氓鄙,靈堂內(nèi)的尸體忽然破棺而出馆揉,到底是詐尸還是另有隱情,我是刑警寧澤抖拦,帶...
    沈念sama閱讀 36,122評(píng)論 5 349
  • 正文 年R本政府宣布把介,位于F島的核電站,受9級(jí)特大地震影響蟋座,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜脚牍,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,801評(píng)論 3 333
  • 文/蒙蒙 一向臀、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧诸狭,春花似錦券膀、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書人閱讀 32,272評(píng)論 0 23
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至叉庐,卻和暖如春舒帮,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背陡叠。 一陣腳步聲響...
    開(kāi)封第一講書人閱讀 33,393評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工玩郊, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人枉阵。 一個(gè)月前我還...
    沈念sama閱讀 48,808評(píng)論 3 376
  • 正文 我出身青樓译红,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親兴溜。 傳聞我的和親對(duì)象是個(gè)殘疾皇子侦厚,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,440評(píng)論 2 359

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