下載本文檔
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
【移動(dòng)應(yīng)用開發(fā)技術(shù)】Android圖片加載利器之Picasso基本用法
今天開始我們來學(xué)習(xí)一下Picasso,計(jì)劃包括以下幾方面的內(nèi)容:圖片加載利器之Picasso進(jìn)階
圖片加載利器之Picasso源碼解析
目前市場上比較流行的圖片加載框架主要有UniversalImageLoader,Picasso,Glide,F(xiàn)resco。
下面簡單介紹一下這幾個(gè)框架:UniversalImageLoader:這個(gè)可以說是非常非常經(jīng)典的一個(gè)了,相信每個(gè)app的開發(fā)人員都使用過,只可惜作者已經(jīng)停止該項(xiàng)目的維護(hù)了,所以不太推薦使用。Picasso:是Square公司出品的圖片加載框架,Square出品必出精品,主要特點(diǎn)就是使用簡單,擴(kuò)展性強(qiáng),支持各種來源的圖片,包括網(wǎng)絡(luò)、Resources、assets、files、contentproviders等。內(nèi)部集成了OkHttp的網(wǎng)絡(luò)框架,所以如果你的項(xiàng)目中使用了Square公司的其他框架,那么推薦使用Picasso,兼容性會(huì)好一些。目前在Github上的Star已經(jīng)達(dá)到12758個(gè)。Glide:是Google員工的開源項(xiàng)目,基于Picasso的一個(gè)框架,代碼風(fēng)格與Picasso非常相似,增加了更多的功能,非常重要的就是支持gif,當(dāng)然它的包會(huì)大一些。如果你的項(xiàng)目對(duì)圖片的使用場景非常多,并且需要支持gif,則推薦使用。目前在Github上的Star已經(jīng)達(dá)到13636個(gè)。Fresco:是FB出品的開源框架,比較新,最大的優(yōu)點(diǎn)就是在內(nèi)存占用上的優(yōu)化,極大的減少了OOM,功能上也包含了以上三種框架的功能,但是也帶來了一個(gè)比較明顯的缺點(diǎn)就是太大了,所以推薦使用在完全是做圖片相關(guān)的app上,否則Picasso和Glide就完全夠用了。目前在Github上的Star已經(jīng)達(dá)到11983個(gè)。上面主要對(duì)各種框架做個(gè)簡單的介紹,既然是講解Picasso的,那么接下來看看Picasso都有哪些功能。1提供內(nèi)存和磁盤緩存,默認(rèn)開啟,可以設(shè)置不進(jìn)行緩存
2圖片加載過程中默認(rèn)顯示的圖片
3圖片加載失敗或出錯(cuò)后顯示的圖片
4圖片加載成功或失敗的回調(diào)
5自定義圖片大小、自動(dòng)測量ImageView大小、裁剪、旋轉(zhuǎn)圖片等
6對(duì)圖片進(jìn)行轉(zhuǎn)換
7標(biāo)簽管理,暫停和恢復(fù)圖片加載
8請(qǐng)求優(yōu)先級(jí)管理
9可以從不同來源加載圖片,網(wǎng)絡(luò)、Resources、assets、files、contentproviders
10更加豐富的擴(kuò)展功能
以上這些功能將會(huì)在下面的文章中進(jìn)行詳細(xì)講解。上面我們提到了Picasso的諸多功能,下面我們來分別演示一下這些功能配置:在build.gradle中添加引用1加載圖片通過源碼可以發(fā)現(xiàn)load方法主要要以下幾種重載超級(jí)簡單有木有,這里面只演示了兩種方式。2加載過程中顯示默認(rèn)圖片placeholder一般網(wǎng)絡(luò)加載圖片耗時(shí)比較長,所以會(huì)先默認(rèn)顯示一張?zhí)娲膱D片,只支持resId和Drawable本地圖片。3加載失敗后顯示錯(cuò)誤的圖片為了顯示錯(cuò)誤圖片,這里面我在正確的地址后面拼了字符串構(gòu)造了一個(gè)錯(cuò)誤的地址,同樣只支持本地的圖片4圖片填充方式4.1fit()該屬性會(huì)根據(jù)ImageView的大小充滿整個(gè)View,不考慮比例,可能造成圖片的拉伸或者縮小4.2centerCrop()按比例裁減圖片,使其居中顯示,充滿View,會(huì)造成圖片顯示不全,必須與resize方法同時(shí)使用4.3centerInside()按比例裁減圖片,圖片可以完全顯示,但如果圖片比View小,則無法充滿整個(gè)View,必須與resize方法同時(shí)使用4.4onlyScaleDown()這里面使用的測試圖片的大小是1240*1563,如果resize的寬高大于圖片的原始寬高,則resize不起作用,采用圖片原始寬高顯示。5取消圖片的過渡顯示效果noFade()默認(rèn)情況下圖片顯示出來都會(huì)有一個(gè)過渡的效果,添加.noFade方法后,可以使該取消該效果,基本上很少使用6圖片旋轉(zhuǎn)rotate()7緩存策略Picasso提供緩存的調(diào)試方法,通過如下代碼可設(shè)置效果圖如下可以看到圖片的左上角有個(gè)藍(lán)色的三角形,表示該圖片是從磁盤加載的,另外如果為紅色則表示從網(wǎng)絡(luò)加載,如果為綠色表示從內(nèi)存加載。Picasso的緩存流程是先檢查內(nèi)存是否有保存該圖片,如果沒有則檢查磁盤是否有保存該圖片,如果沒有則從網(wǎng)絡(luò)下載,下載成功之后分別保存到內(nèi)存和磁盤上各一份,如果我們有時(shí)候不想緩存該圖片或者不想從緩存獲取圖片,該如何呢?Picasso也給我買提供了相應(yīng)的控制方法。上面兩個(gè)方法完全等價(jià),但是第一種寫法官方已經(jīng)不推薦使用了,這里面列出來只是讓大家了解一下。
這個(gè)表示什么意思呢?跳過從內(nèi)存加載圖片,并且圖片下載之后也不在內(nèi)存中進(jìn)行緩存。
也就是圖片的左上角的標(biāo)識(shí)永遠(yuǎn)不可能為綠色。
MemoryPolicy.NO_CACHE:直接跳過檢查內(nèi)存是否有緩存該圖片
MemoryPolicy.NO_STORE:圖片下載之后不在內(nèi)存中進(jìn)行緩存同理該方法表示跳過從磁盤加載圖片,并且圖片下載之后也不在磁盤中進(jìn)行緩存。
這里注意只是不在磁盤中緩存,但是會(huì)在內(nèi)存中緩存,因此若內(nèi)存和磁盤中都不想緩存則需要和兩個(gè)方法共同使用,如下:NetworkPolicy枚舉中還有一個(gè)值OFFLINE,這個(gè)表示強(qiáng)制從緩存中取,不會(huì)發(fā)起網(wǎng)絡(luò)請(qǐng)求,如果緩存中沒有也不會(huì)從網(wǎng)絡(luò)中請(qǐng)求。8優(yōu)先級(jí)priority設(shè)想一種場景,當(dāng)我們打開一個(gè)界面的時(shí)候,界面上有列表,每個(gè)列表項(xiàng)都有圖片需要加載,列表上面還有一張圖片需要提前加載,那么怎樣來調(diào)度每個(gè)請(qǐng)求的優(yōu)先級(jí)呢?
Picasso給我們提供了priority方法來管理請(qǐng)求的優(yōu)先級(jí)通過priority方法的注釋中可以知道默認(rèn)的優(yōu)先級(jí)是NORMAL,因此我們可以如下實(shí)現(xiàn)高優(yōu)先級(jí)加載:9tag標(biāo)簽管理使用過list加載圖片的童鞋都知道在列表滾動(dòng)過程中停止加載圖片,停止?jié)L動(dòng)時(shí)恢復(fù)圖片加載,那么這樣的功能在Picasso中時(shí)如何實(shí)現(xiàn)的呢?
這就用到了tag標(biāo)簽的功能
通過如下代碼設(shè)置tag:在Picasso類中提供了如下幾個(gè)方法來控制tag通過名字可以很好理解了,我們?cè)诹斜頋L動(dòng)的時(shí)候調(diào)用在停止?jié)L動(dòng)的時(shí)候調(diào)用至于cancelTag用于取消下載,一般我們?cè)贏ctivity銷毀的時(shí)候?qū)⑽赐瓿傻恼?qǐng)求取消。10手動(dòng)指定key值stableKey我們猜想一個(gè)問題,Picasso是如何知道是否有緩存圖片的,一般根據(jù)key值來判斷,那么這個(gè)key值又是如何生成的呢?通過閱讀源碼可以知道,根據(jù)傳入的uri或者resourceId,是否設(shè)置了旋轉(zhuǎn)角度,是否設(shè)置了resi
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024至2030年直線導(dǎo)軌副項(xiàng)目投資價(jià)值分析報(bào)告
- 2024至2030年醫(yī)用多功能電腦高頻電刀項(xiàng)目投資價(jià)值分析報(bào)告
- 年度壓痕機(jī)競爭策略分析報(bào)告
- 年度醫(yī)用材料制造競爭策略分析報(bào)告
- 年度觸片競爭策略分析報(bào)告
- 2025屆浙江省普通高校招生高一物理第一學(xué)期期中考試試題含解析
- 2025屆江蘇省宿遷市高二物理第一學(xué)期期末經(jīng)典模擬試題含解析
- 2025屆福建省重點(diǎn)中學(xué)高三物理第一學(xué)期期中聯(lián)考模擬試題含解析
- 2025屆重慶市江津中學(xué)、合川中學(xué)等七校高物理高三上期末檢測模擬試題含解析
- 2025屆山東省兗州一中物理高一第一學(xué)期期末監(jiān)測試題含解析
- 小米公司CIS設(shè)計(jì)
- 【可行性報(bào)告】2023年年煙草行業(yè)項(xiàng)目可行性分析報(bào)告
- 《茶葉審評(píng)技術(shù)》課程考試復(fù)習(xí)題庫(含答案)
- 泡沫塑料行業(yè)消防安全制度設(shè)立與監(jiān)察
- 《非連續(xù)性文本解讀》
- 表演專業(yè)大學(xué)生職業(yè)生涯規(guī)劃書
- 網(wǎng)絡(luò)安全防御綜合態(tài)勢感知系統(tǒng)項(xiàng)目可行性分析報(bào)告
- 螺紋緊固件知識(shí)
- NET Core 底層入門(完整版)
- 淺談歌曲《紅豆詞》的藝術(shù)特征
- 【設(shè)計(jì)師】訪談平面設(shè)計(jì)師
評(píng)論
0/150
提交評(píng)論