簡(jiǎn)介
Glide是一款谷歌官方推薦使用的強(qiáng)大圖片加載框架。它具有使用非常簡(jiǎn)單碰酝、可配置度高离陶、加載的圖片格式豐富、加載的圖片路徑多種庐杨、高效的緩存策略和與Activity/Fragment生命周期綁定等特點(diǎn)宋下。
特點(diǎn)
(1)使用簡(jiǎn)單
(2)可配置度高,自適應(yīng)程度高
(3)支持常見圖片格式 jpg辑莫、png、gif罩引、webp
(4)支持多種數(shù)據(jù)源 網(wǎng)絡(luò)各吨、本地、資源袁铐、Assets 等
(5)高效緩存策略揭蜒,支持Memory和Disk圖片緩存 默認(rèn)Bitmap格式采用RGB_565內(nèi)存使用至少減少一半
(6)生命周期集成,根據(jù)Activity/Fragment生命周期自動(dòng)管理請(qǐng)求
(7)高效處理Bitmap 使用Bitmap Pool使Bitmap復(fù)用剔桨,主動(dòng)調(diào)用recycle回收需要回收的Bitmap屉更,減小系統(tǒng)回收壓力
下載地址
功能
1)簡(jiǎn)單使用
Glide.with(this).load("url").into(imageView);
2)Glide.with()使用
(1)with(Context context)
使用Application上下文,Glide請(qǐng)求將不受Activity/Fragment生命周期控制洒缀。
(2)with(Activity activity)
使用Activity作為上下文瑰谜,Glide的請(qǐng)求會(huì)受到Activity生命周期控制。
(3)with(FragmentActivity activity)
Glide的請(qǐng)求會(huì)受到FragmentActivity生命周期控制树绩。
(4)with(android.app.Fragment fragment)
Glide的請(qǐng)求會(huì)受到Fragment 生命周期控制萨脑。
(5)with(android.support.v4.app.Fragment fragment)
Glide的請(qǐng)求會(huì)受到Fragment生命周期控制。
3)load()使用
Glide基本可以load任何可以拿到的媒體資源
//SD卡資源:
load("file://"+ Environment.getExternalStorageDirectory().getPath()+"/test.jpg")
//assets資源:
load("file:///android_asset/f003.gif")
//raw資源:
load("Android.resource://com.frank.glide/raw/raw_1")
//或
load("android.resource://com.frank.glide/raw/"+R.raw.raw_1)
//drawable資源:
load("android.resource://com.frank.glide/drawable/news")
//或
load("android.resource://com.frank.glide/drawable/"+R.drawable.news)
//ContentProvider資源:
load("content://media/external/images/media/139469")
//http資源:
load("http://img.my.csdn.NET/uploads/201508/05/1438760757_3588.jpg")
//https資源:
load("https://wx4.sinaimg.cn/mw690/7944ffc4ly1fixi692jkqj22g53o7u10.jpg")
注意:load不限于String類型
還可以是:load(Uri uri)饺饭,load(File file)渤早,load(Integer resourceId),load(URL url)瘫俊,load(byte[] model)鹊杖,load(T model),loadFromMediaStore(Uri uri)扛芽。
4)重要功能
(1)禁止內(nèi)存緩存:
.skipMemoryCache(true)
(2)清除內(nèi)存緩存:
必須在UI線程中調(diào)用Glide.get(context).clearMemory();
(3)禁止磁盤緩存:
.diskCacheStrategy(DiskCacheStrategy.NONE)
(5)獲取緩存大新畋汀:
new GetDiskCacheSizeTask(textView).execute(new File(getCacheDir(), DiskCache.Factory.DEFAULT_DISK_CACHE_DIR));
(6)指定資源的優(yōu)先加載順序:
//優(yōu)先加載
Glide
.with(context)
.load(heroImageUrl)
.priority(Priority.HIGH)
.into(imageViewHero);
//后加載
Glide
.with(context)
.load(itemImageUrl)
.priority(Priority.LOW)
.into(imageViewItem);
(7)先顯示縮略圖,再顯示原圖:
//用原圖的1/10作為縮略圖
Glide
.with(this)
.load("http://inthecheesefactory.com/uploads/source/nestedfragment/fragments.png")
.thumbnail(0.1f)
.into(iv_0);
//用其它圖片作為縮略圖
DrawableRequestBuilder<Integer> thumbnailRequest = Glide
.with(this)
.load(R.drawable.news);
Glide.with(this)
.load("http://inthecheesefactory.com/uploads/source/nestedfragment/fragments.png")
.thumbnail(thumbnailRequest)
.into(iv_0);
(8)對(duì)圖片進(jìn)行裁剪胸哥、模糊涯竟、濾鏡等處理:
//圓形裁剪
Glide.with(this)
.load("http://inthecheesefactory.com/uploads/source/nestedfragment/fragments.png")
.bitmapTransform(new CropCircleTransformation(this))
.into(iv_0);
//圓角處理
Glide.with(this)
.load("http://inthecheesefactory.com/uploads/source/nestedfragment/fragments.png")
.bitmapTransform(new RoundedCornersTransformation(this,30,0, RoundedCornersTransformation.CornerType.ALL))
.into(iv_0);
//灰度處理
Glide.with(this)
.load("http://inthecheesefactory.com/uploads/source/nestedfragment/fragments.png")
.bitmapTransform(new GrayscaleTransformation(this))
.into(iv_0);
//其它變換...
(9)對(duì)請(qǐng)求狀態(tài)進(jìn)行監(jiān)聽:
(10)對(duì)資源的下載進(jìn)度進(jìn)行監(jiān)聽:
基本使用
//加載網(wǎng)絡(luò)圖片
tvGlide1.setText("加載網(wǎng)絡(luò)圖片");
Glide.with(this)
.load("https://wx4.sinaimg.cn/mw690/7944ffc4ly1fixi692jkqj22g53o7u10.jpg\n")
.into(ivGlide1);
//加載資源圖片
tvGlide2.setText("加載資源圖片");
Glide.with(this).load(R.drawable.ic_launcher_background).into(ivGlide2);
//加載本地圖片
tvGlide3.setText("加載本地圖片");
String path = Environment.getExternalStorageDirectory() + "/bobo.jpg";
File file = new File(path);
Uri uri = Uri.fromFile(file);
Glide.with(this).load(uri).into(ivGlide3);
//加載網(wǎng)絡(luò)gif
tvGlide4.setText("加載網(wǎng)絡(luò)gif");
String gif = "http://b.hiphotos.baidu.com/zhidao/pic/item/faedab64034f78f066abccc57b310a55b3191c67.jpg";
Glide.with(this).load(gif).placeholder(R.drawable.ic_launcher_background).into(ivGlide4);
//加載資源gif
tvGlide5.setText("加載資源gif");
Glide.with(this).load(R.drawable.loading)
.placeholder(R.drawable.ic_launcher_background)
.into(ivGlide5);
//加載本地gif
tvGlide6.setText("加載本地gif");
String gifPath = Environment.getExternalStorageDirectory() + "/girl.gif";
File gifFile = new File(gifPath);
Glide.with(this).load(gifFile).placeholder(R.drawable.ic_launcher_background).into(ivGlide6);
//(7)加載本地小視頻和快照
tvGlide7.setText("加載本地小視頻和快照");
String videoPath =Environment.getExternalStorageDirectory()+"/7.mp4";
File videoFile = new File(videoPath);
Glide.with(this).load(Uri.fromFile(videoFile)).placeholder(R.mipmap.ic_launcher).into(ivGlide7);
//(8)設(shè)置縮略圖比例,然后,先加載縮略圖,再加載原圖
tvGlide8.setText("設(shè)置縮略圖比例,然后庐船,先加載縮略圖银酬,再加載原圖");
String urlPath= Environment.getExternalStorageDirectory() + "/bobo.jpg";
Glide.with(this).load(new File(urlPath)).thumbnail(0.1f)
.centerCrop().placeholder(R.mipmap.ic_launcher)
.into(ivGlide8);
//(9)先建立一個(gè)縮略圖對(duì)象,然后筐钟,先加載縮略圖揩瞪,再加載原圖
tvGlide9.setText("先建立一個(gè)縮略圖對(duì)象,然后篓冲,先加載縮略圖李破,再加載原圖");
RequestBuilder<Drawable> requestManager = Glide.with(this).load(new File(urlPath));
Glide.with(this).load(Uri.fromFile(videoFile))
.thumbnail(requestManager).centerCrop()
.placeholder(R.mipmap.ic_launcher).into(ivGlide9);