android中Picasso顯示網路圖片
使用之前匯入jar包(picasso.jar網上搜搜都有)或者在android studio中新增依賴compile 'com.squareup.picasso:picasso:2.5.2'
使用方式:結合ViewPager實現首頁輪播圖。
主要核心程式碼:
ImageView imageView = new ImageView(getActivity()); //獲取本地圖片 //imageView.setBackgroundResource(imageIds[i]); //獲取網路圖片 Picasso.with(getActivity()).load("url").into(imageView); images.add(imageView);
1. 簡介
- 介紹:Picasso,可譯為“畢加索”,是Android中一個圖片載入開源庫
大概是因為其使用使用方法簡單、優雅所以這樣取名
- 主要作用:實現圖片載入
2. 功能特點
2.1 功能列表
功能列表- 從上面可以看出,Picasso不僅實現了圖片非同步載入的功能,還解決了Android中載入圖片時需要解決的一些常見問題
- 接下來,我會對Picasso的每個功能點進行詳細的介紹
2.2 功能介紹
2.2.1 圖片的非同步載入(最基礎功能)
ImageView targetImageView = (ImageView) findViewById(R.id.ImageView) ;
String Url = "http://218.192.170.132/1.jpg";
//Picasso使用了流式介面的呼叫方式
//Picasso類是核心實現類。
//實現圖片載入功能至少需要三個引數:
Picasso
//with(Context context)
//Context對於很多Android API的呼叫都是必須的,這裡就不多說了
.with(context)
//load(String imageUrl):被載入影象的Url地址。
//大多情況下,一個字串代表一個網路圖片的URL。
.load(Url)
//into(ImageView targetImageView):圖片最終要展示的地方。
.into(targetImageView);
2.2.2 圖片轉換
使用最少的記憶體完成複雜的圖片轉換,轉換圖片以適合所顯示的ImageView,來減少記憶體消耗
Picasso.with(context)
.load(url)
//裁剪圖片尺寸
.resize(50, 50)
//設定圖片圓角
.centerCrop()
.into(imageView)
2.2.3 載入過重 & 錯誤處理
Picasso支援載入過程中和載入錯誤時顯示對應圖片
Picasso.with(context)
.load(url)
//載入過程中的圖片顯示
.placeholder(R.drawable.user_placeholder)
//載入失敗中的圖片顯示
//如果重試3次(下載原始碼可以根據需要修改)還是無法成功載入圖片,則用錯誤佔位符圖片顯示。
.error(R.drawable.user_placeholder_error)
.into(imageView);
2.2.4 在Adapter中的回收不在視野的ImageView和取消已經回收的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 從不同資源源載入
支援多種資料來源 網路、本地、資源、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 自動新增磁碟和記憶體二級快取功能
2.2.7 支援優先順序處理
每次任務排程前會選擇優先順序高的任務,比如 App 頁面中 Banner 的優先順序高於 Icon 時就很適用。
2.2.8 支援飛航模式、併發執行緒數根據網路型別而變
手機切換到飛航模式或網路型別變換時會自動調整執行緒池最大併發數,比如 wifi 最大併發為 4, 4g 為 3,3g 為 2
2.2.9 “無”本地快取
無”本地快取,不是說沒有本地快取,而是 Picasso 自己沒有實現,交給了 Square 的另外一個網路庫 okhttp 去實現,這樣的好處是可以通過請求 Response Header 中的 Cache-Control 及 Expired 控制圖片的過期時間。
3. Demo例項
沒有Demo的程式碼講解不是好文章,讓我們來一步步學會使用Picasso。
步驟1:在gradle新增依賴
compile 'com.squareup.picasso:picasso:2.5.2'
步驟2:新增網路許可權
<uses-permission android:name="android.permission.INTERNET"/>
步驟1和步驟2是Picasso使用的前提,千萬別忘了!!!!
步驟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 優點
- 使用簡單、方便(一行程式碼的事情)
- 由於同樣是出品自Square的,Square 公司的其他開源庫如 Retrofit 或者 OkHttp和Picasso搭配使用相容性會更好些,佔用體積也會少些
所以,如果專案已經使用了 Square 公司的其他開源庫(如 Retrofit 或者 OkHttp),在滿足需求的前提下建議使用Picasso
4.2 缺點
- 功能較為簡單-圖片載入;
- 效能(載入速度等等)較其他圖片載入庫(Glide、Fresco)較差
- 自身無實現“本地快取”