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)