Glide和Picasso的區(qū)別
首先我們了解的設(shè)置圖片的方式有哪些呢候味?
ImageLoader
Glide尚胞,一個被google所推薦的圖片加載庫,常見的還有Picasso,F(xiàn)resco等,每一個都非常穩(wěn)定,功能也都十分強大。但是它們的使用場景基本都是重合的,也就是說我們基本只需要選擇其中一個來進行學習和使用就足夠了怜森,每一個框架都嘗試去掌握的話則有些浪費時間。最常用的是Glide和Picasso
如果你了解不是特別多的話建議可以了解一下 :常見的圖片加載框架
Picasso的使用
1.Picasso.with(this) .load(“http://nuuneoi.com/uploads/source/playstore/cover.jpg“) .into(ivImgPicasso);
2.Picasso.with(this) .load(“http://nuuneoi.com/uploads/source/playstore/cover.jpg“) .resize(768, 432) .into(ivImgPicasso);
3.Picasso.with(this) .load(“http://nuuneoi.com/uploads/source/playstore/cover.jpg“) .fit() .centerCrop() .into(ivImgPicasso);
這三種方法都可以加載圖片顯示到頁面上,
第一種:加載了全尺寸的圖片到內(nèi)存,然后讓GPU來實時重繪大小
第二種:你需要主動計算ImageView的大小肃弟,或者說你的ImageView大小是具體的值(而不是wrap_content)敌蜂,
第三種:按統(tǒng)一比例縮放圖片(保存圖片的尺寸比例)便于圖片的二維(寬度和高度)等于或者大于相應(yīng)的視圖的維度,這種方法和Glide加載圖片占用的內(nèi)存幾乎是相同的芳绩,雖然內(nèi)存開銷差距不大,但是在這個問題上Glide完勝Picasso撞反。因為Glide可以自動計算出任意情況下的ImageView的大小妥色。
Glide的使用
Glide.with(this) .load("圖片的URL") .into(ivImgGlide);
load方法中不僅可以傳入圖片地址,還可以傳入圖片文件File遏片,resource嘹害,圖片的byte數(shù)組等
// 加載本地圖片
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);
// 加載二進制流
byte[] image = getImageBytes();
Glide.with(this).load(image).into(imageView);
// 加載Uri對象
Uri imageUri = getImageUri();
Glide.with(this).load(imageUri).into(imageView);
占位圖
Glide.with(this)
.load(url)
.placeholder(R.drawable.loading)
.error(R.drawable.error)
.into(imageView);
Glide 使用加載動畫和禁止動畫
glide默認有淡入淡出動畫.crossFade()也可以不加,
也有重載.crossFade(int duration),主要設(shè)置動畫進行快慢吮便,默認是300毫秒
Glide
.with(context)
.load(UsageExampleListViewAdapter.eatFoodyImages[0])
.placeholder(R.mipmap.ic_launcher)
.error(R.mipmap.future_studio_launcher)
.crossFade()
.into(imageViewFade);
設(shè)置圖片大小
.override(300, 200); //設(shè)置加載圖片尺寸大小
縮略圖
縮略圖不同于前面提到的占位圖笔呀。占位圖應(yīng)當是跟app綁定在一起的資源。
縮略圖是一個動態(tài)的占位圖髓需,可以從網(wǎng)絡(luò)加載许师。
縮略圖也會被先加載,直到實際圖片請求加載完畢僚匆。
如果因為某些原因微渠,縮略圖獲得的時間晚于原始圖片,它并不會替代原始圖片咧擂,而
是簡單地被忽略掉逞盆。
.thumbnail( 0.1f )里面的參數(shù)是一個浮點乘法運算
這個方法是啥意思呢?
例如松申,傳遞一個0.1f作為參數(shù)云芦,Glide會加載原始圖片大小的10%的圖片俯逾。
原始圖片---->1000x1000像素,
則縮略圖---->100x100像素焕数。
由于圖片將會比ImageView小纱昧,你需要確保縮放類型是否正確堡赔。
緩存
我們都知道Glide是自帶緩存的识脆,所有的圖片請求都會被緩存在內(nèi)存和磁盤上。
大多數(shù)情況下善已,緩存是一個非常有用的東西灼捂,但在一些特殊的情況下并不是很明智。
禁止內(nèi)存存儲:
.skipMemoryCache( true )
禁止磁盤存儲:
.diskCacheStrategy( DiskCacheStrategy.NONE )
.diskCacheStrategy()中枚舉參數(shù)以及意義:
DiskCacheStrategy.NONE 啥也不緩存
DiskCacheStrategy.SOURCE 只緩存全尺寸圖.
DiskCacheStrategy.RESULT 只緩存最終降低分辨后用到的圖片
DiskCacheStrategy.ALL 緩存所有類型的圖片 (默認)
Glide與Picasso的區(qū)別:
1换团、內(nèi)存:
加載同一張圖片Picasso悉稠,Picasso的內(nèi)存開銷仍然遠大于Glide。
2艘包、Image質(zhì)量的細節(jié):
Glide默認的是Bitmap格式是RGB-565
Picasso默認ARGB_8888格式
Glide加載的圖片沒有Picasso那么平滑的猛,但是很難察覺
3、磁盤緩存:
Picasso緩存的是全尺寸的想虎。
而Glide緩存的跟ImageView尺寸相同
將ImageView調(diào)整成不同大小不管大小如何設(shè)置卦尊。Picasso只緩存一個全尺寸的。Glide則不同舌厨,它會為每種大小的ImageView緩存一次
讓Glide既緩存全尺寸又緩存其他尺寸的方法:
Glide.with(this) .load(“http://nuuneoi.com/uploads/source/playstore/cover.jpg“) .diskCacheStrategy(DiskCacheStrategy.ALL) .into(ivImgGlide);
Glide的這種方式優(yōu)點是加載顯示非称袢矗快。而Picasso的方式則因為需要在顯示之前重新調(diào)整大小而導致一些延遲裙椭,Glide比Picasso快躏哩,雖然需要更大的空間來緩存。
4揉燃、Gif動圖
Glide可以加載Gif動圖扫尺,Picasso不可以加載動圖
Glide動畫會消耗太多的內(nèi)存,因此使用時謹慎使用
總結(jié)一下他們之間的區(qū)別:
(1)Glide比Picasso加載速度快炊汤,但Glide比Picasso需要更大的空間來緩存正驻;
(2)Glide加載圖像及磁盤緩存的方式都優(yōu)于Picasso,且Glide更有利于減少OutOfMemoryError的發(fā)生婿崭;
(3)Glide可以加載Gif動圖,Picasso不可以加載動圖
(4)編碼格式不同
(5)Picasso加載的圖片比Glide加載的圖片平滑(可忽略不計)