前言
- 上文已經(jīng)對當(dāng)今Android主流的圖片加載庫進行了全面介紹 & 對比
如果你還沒閱讀,我建議你先移步這里閱讀
- 今天我們來學(xué)習(xí)其中一個Android主流的圖片加載庫的使用 - Picasso
Carson帶你學(xué)Android開源庫系列文章:
Carson帶你學(xué)Android:主流開源圖片加載庫對比(UIL仔掸、Picasso、Glide忆植、Fresco)
Carson帶你學(xué)Android:主流開源網(wǎng)絡(luò)請求庫對比(Volley、OkHttp谒臼、Retrofit)
Carson帶你學(xué)Android:網(wǎng)絡(luò)請求庫Retrofit使用教程
Carson帶你學(xué)Android:網(wǎng)絡(luò)請求庫Retrofit源碼分析
Carson帶你學(xué)Android:圖片加載庫Glide使用教程
Carson帶你學(xué)Android:圖片加載庫Glide源碼分析
Carson帶你學(xué)Android:V-Layout朝刊,淘寶、天貓都在用的UI框架屋休,趕緊用起來吧坞古!
目錄
1. 簡介
- 介紹:Picasso,可譯為“畢加索”劫樟,是Android中一個圖片加載開源庫
大概是因為其使用使用方法簡單痪枫、優(yōu)雅所以這樣取名
- 主要作用:實現(xiàn)圖片加載
2. 功能特點
2.1 功能列表
- 從上面可以看出,Picasso不僅實現(xiàn)了圖片異步加載的功能叠艳,還解決了Android中加載圖片時需要解決的一些常見問題
- 接下來奶陈,我會對Picasso的每個功能點進行詳細的介紹
2.2 功能介紹
2.2.1 圖片的異步加載(最基礎(chǔ)功能)
ImageView targetImageView = (ImageView) findViewById(R.id.ImageView);
String Url = "http://218.192.170.132/1.jpg";
//Picasso使用了流式接口的調(diào)用方式
//Picasso類是核心實現(xiàn)類。
//實現(xiàn)圖片加載功能至少需要三個參數(shù):
Picasso
//with(Context context)
//Context對于很多Android API的調(diào)用都是必須的附较,這里就不多說了
.with(context)
//load(String imageUrl):被加載圖像的Url地址吃粒。
//大多情況下,一個字符串代表一個網(wǎng)絡(luò)圖片的URL拒课。
.load(Url)
//into(ImageView targetImageView):圖片最終要展示的地方徐勃。
.into(targetImageView);
2.2.2 圖片轉(zhuǎn)換
使用最少的內(nèi)存完成復(fù)雜的圖片轉(zhuǎn)換,轉(zhuǎn)換圖片以適合所顯示的ImageView早像,來減少內(nèi)存消耗
Picasso.with(context)
.load(url)
//裁剪圖片尺寸
.resize(50, 50)
//設(shè)置圖片圓角
.centerCrop()
.into(imageView)
2.2.3 加載過重 & 錯誤處理
Picasso支持加載過程中和加載錯誤時顯示對應(yīng)圖片
Picasso.with(context)
.load(url)
//加載過程中的圖片顯示
.placeholder(R.drawable.user_placeholder)
//加載失敗中的圖片顯示
//如果重試3次(下載源代碼可以根據(jù)需要修改)還是無法成功加載圖片僻肖,則用錯誤占位符圖片顯示。
.error(R.drawable.user_placeholder_error)
.into(imageView);
2.2.4 在Adapter中的回收不在視野的ImageView和取消已經(jīng)回收的ImageView下載進程
@Override
public void getView(int position, View convertView, ViewGroup parent) {
SquaredImageView view = (SquaredImageView) convertView;
if (view == null) {
view = new SquaredImageView(context);
}
String url = getItem(position);
Picasso.with(context).load(url).into(view);
}
2.2.5 從不同資源源加載
支持多種數(shù)據(jù)源 網(wǎng)絡(luò)卢鹦、本地臀脏、資源、Assets 等
//加載資源文件
Picasso.with(context).load(R.drawable.landing_screen).into(imageView1);
//加載本地文件
Picasso.with(context).load(new File("/images/oprah_bees.gif")).into(imageView2);
2.2.6 自動添加磁盤和內(nèi)存二級緩存功能
2.2.7 支持優(yōu)先級處理
每次任務(wù)調(diào)度前會選擇優(yōu)先級高的任務(wù),比如 App 頁面中 Banner 的優(yōu)先級高于 Icon 時就很適用揉稚。
2.2.8 支持飛行模式秒啦、并發(fā)線程數(shù)根據(jù)網(wǎng)絡(luò)類型而變
手機切換到飛行模式或網(wǎng)絡(luò)類型變換時會自動調(diào)整線程池最大并發(fā)數(shù),比如 wifi 最大并發(fā)為 4搀玖, 4g 為 3余境,3g 為 2
2.2.9 “無”本地緩存
無”本地緩存,不是說沒有本地緩存灌诅,而是 Picasso 自己沒有實現(xiàn)葛超,交給了 Square 的另外一個網(wǎng)絡(luò)庫 okhttp 去實現(xiàn),這樣的好處是可以通過請求 Response Header 中的 Cache-Control 及 Expired 控制圖片的過期時間延塑。
3. Demo實例
沒有Demo的代碼講解不是好文章,讓我們來一步步學(xué)會使用Picasso答渔。
步驟1:在gradle添加依賴
compile 'com.squareup.picasso:picasso:2.5.2'
步驟2:添加網(wǎng)絡(luò)權(quán)限
<uses-permission android:name="android.permission.INTERNET"/>
步驟1和步驟2是Picasso使用的前提关带,千萬別忘了!U铀骸K纬!
步驟3:在MainActivity中
ImageView targetImageView = (ImageView) findViewById(R.id.ImageView);
String Url = "http://218.192.170.132/1.jpg";
Picasso
.with(this)
.load(Url)
.into(targetImageView);
還有具體其他功能需要配置的自己按照我上面寫的進行配置就好了~
這里再貼上Picasso的Github地址:請點擊這里
4. 特點
4.1 優(yōu)點
- 使用簡單务豺、方便(一行代碼的事情)
- 由于同樣是出品自Square的磨总,Square 公司的其他開源庫如 Retrofit 或者 OkHttp和Picasso搭配使用兼容性會更好些,占用體積也會少些
所以笼沥,如果項目已經(jīng)使用了 Square 公司的其他開源庫(如 Retrofit 或者 OkHttp)蚪燕,在滿足需求的前提下建議使用Picasso
4.2 缺點
- 功能較為簡單-圖片加載;
- 性能(加載速度等等)較其他圖片加載庫(Glide奔浅、Fresco)較差
- 自身無實現(xiàn)“本地緩存”
5. 總結(jié)
- Picasso使用起來是不是非常簡單馆纳?相信你看完這篇文章后你能全面掌握Picasso的用法
- 但是Picasso的源碼卻不簡單,接下來我會對Picasso的源碼進行詳細分析汹桦,感興趣的同學(xué)可以繼續(xù)關(guān)注Carson帶你學(xué)Android開源庫系列文章:
Carson帶你學(xué)Android:主流開源圖片加載庫對比(UIL鲁驶、Picasso、Glide舞骆、Fresco)
Carson帶你學(xué)Android:主流開源網(wǎng)絡(luò)請求庫對比(Volley钥弯、OkHttp、Retrofit)
Carson帶你學(xué)Android:網(wǎng)絡(luò)請求庫Retrofit使用教程
Carson帶你學(xué)Android:網(wǎng)絡(luò)請求庫Retrofit源碼分析
Carson帶你學(xué)Android:圖片加載庫Glide使用教程
Carson帶你學(xué)Android:圖片加載庫Glide源碼分析
Carson帶你學(xué)Android:V-Layout督禽,淘寶脆霎、天貓都在用的UI框架,趕緊用起來吧赂蠢!
歡迎關(guān)注Carson_Ho的簡書
不定期分享關(guān)于安卓開發(fā)的干貨绪穆,追求短、平、快玖院,但卻不缺深度菠红。