Carson帶你學(xué)Android:圖片加載庫Picasso全面講解


前言

  • 上文已經(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ā)的干貨绪穆,追求短、平、快玖院,但卻不缺深度菠红。


請點贊!因為你的鼓勵是我寫作的最大動力难菌!

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末试溯,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子郊酒,更是在濱河造成了極大的恐慌遇绞,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,204評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件燎窘,死亡現(xiàn)場離奇詭異摹闽,居然都是意外死亡,警方通過查閱死者的電腦和手機褐健,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,091評論 3 395
  • 文/潘曉璐 我一進店門付鹿,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人蚜迅,你說我怎么就攤上這事舵匾。” “怎么了谁不?”我有些...
    開封第一講書人閱讀 164,548評論 0 354
  • 文/不壞的土叔 我叫張陵坐梯,是天一觀的道長。 經(jīng)常有香客問我刹帕,道長吵血,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,657評論 1 293
  • 正文 為了忘掉前任偷溺,我火速辦了婚禮践瓷,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘亡蓉。我一直安慰自己晕翠,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 67,689評論 6 392
  • 文/花漫 我一把揭開白布砍濒。 她就那樣靜靜地躺著淋肾,像睡著了一般。 火紅的嫁衣襯著肌膚如雪爸邢。 梳的紋絲不亂的頭發(fā)上樊卓,一...
    開封第一講書人閱讀 51,554評論 1 305
  • 那天,我揣著相機與錄音杠河,去河邊找鬼碌尔。 笑死浇辜,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的唾戚。 我是一名探鬼主播柳洋,決...
    沈念sama閱讀 40,302評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼叹坦!你這毒婦竟也來了熊镣?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,216評論 0 276
  • 序言:老撾萬榮一對情侶失蹤募书,失蹤者是張志新(化名)和其女友劉穎绪囱,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體莹捡,經(jīng)...
    沈念sama閱讀 45,661評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡鬼吵,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,851評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了篮赢。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片而柑。...
    茶點故事閱讀 39,977評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖荷逞,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情粹排,我是刑警寧澤种远,帶...
    沈念sama閱讀 35,697評論 5 347
  • 正文 年R本政府宣布,位于F島的核電站顽耳,受9級特大地震影響坠敷,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜射富,卻給世界環(huán)境...
    茶點故事閱讀 41,306評論 3 330
  • 文/蒙蒙 一膝迎、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧胰耗,春花似錦限次、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,898評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至赠群,卻和暖如春羊始,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背查描。 一陣腳步聲響...
    開封第一講書人閱讀 33,019評論 1 270
  • 我被黑心中介騙來泰國打工突委, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留柏卤,地道東北人。 一個月前我還...
    沈念sama閱讀 48,138評論 3 370
  • 正文 我出身青樓匀油,卻偏偏與公主長得像缘缚,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子钧唐,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,927評論 2 355

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