Picasso開源圖片載入利器
阿新 • • 發佈:2019-02-02
英文官網地址:http://square.github.io/picasso/
在Android開發中,我們往往會需要遠端獲取圖片並且顯示在客戶端上面,從前我們都是使用HttpUrlConnection和AsyncTask這種原生的方式來完成,但是到了現在就不推薦這樣使用了,因為這樣會需要我們編寫大量程式碼,還需要處理快取和下載管理等。
Picasso:A
Powerful Image Downloading and Caching Library for Android
Picasso(畢加索),外國人起名字還是很有意思的,根據名字我們基本可以知道它是跟圖片有關的框架
我們都知道,在主執行緒中是無法執行耗時操作的,所以需要AsyncTask,將耗時操作執行在後臺執行緒中。網路載入圖片也是一樣的,例如:
public class MainActivity extends Activity {
private ImageView imageView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
imageView = (ImageView) findViewById(R.id.image);
String url = "http://www.jycoder.com/json/Image/1.jpg" ;
// 執行Task
new ImageDownloadTask(ivBasicImage).execute(url);
}
//自定義獲取圖片Task
private class ImageDownloadTask extends AsyncTask<String, Void, Bitmap> {
ImageView imageView;
public ImageDownloadTask(ImageView imageView) {
this.imageView = imageView;
}
protected Bitmap doInBackground(String... addresses) {
Bitmap bitmap = null;
InputStream in;
try {
// 建立URL連線
URL url = new URL(addresses[0]);
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
// 開啟輸入流
conn.connect();
in = conn.getInputStream();
// 編碼輸入流
bitmap = BitmapFactory.decodeStream(in);
} catch (IOException e) {
e.printStackTrace();
} finally {
if(in != null)
in.close();
}
return bitmap;
}
// Task執行完畢,返回bitmap
@Override
protected void onPostExecute(Bitmap result) {
// Set bitmap image for the result
imageView.setImageBitmap(result);
}
}
}
可以看出來以上程式碼非常繁瑣,但是如果換成我們今天要講的Picasso那麼這個步驟就變得簡單了很多。
什麼是Picasso:強大的圖片下載和快取的第三方庫;我覺得這就是對它最準確的描述了,至於其他特性,可以參見官網介紹
1、基本使用方法
Picasso.with(Context).load(imageurl).into(ImageView);對,你沒有看錯,一行程式碼就搞定了我們的圖片載入!
這行程式碼為我們解決了什麼問題:
- 自動將影象快取在本地
- 通過圖片壓縮轉換以減少記憶體消耗
- 自動處理了ImageView的回收,即自動取消不在視野範圍內的ImageView檢視資源的載入
2、剪裁圖片
Picasso.with(context).load(url) .resize(50, 50).centerCrop().into(imageView);是不是也非常簡單
3、佔位圖片
picasso提供了兩種佔位圖片,未載入完成或者載入發生錯誤的時需要一張圖片作為提示。
Picasso.with(MainActivity.this).load("http://square.github.io/picasso/static/sample.png").placeholder(R.mipmap.loading).error(R.mipmap.ic_launcher).into(img);
然後呢,Picasso還提供了debug的標示,呼叫picasso的setIndicatorsEnabled方法,true是debug模式,跟蹤程式碼其實就是在最後生成的PicassoDrawable類的ondraw裡繪製了個左上角小三角