Square公司開源的一個Android圖形緩存庫html
A powerful image downloading and caching library for Androidjava
項目地址: https://github.com/square/picassoandroid
文檔: http://square.github.io/picasso/git
API: http://square.github.io/picasso/javadoc/index.htmlgithub
若是使用ProGuard要加入以下依賴:緩存
-dontwarn com.squareup.okhttp.**
優勢及特性: 如下在Picasso中會自動處理,無需使用者操心:網絡
Gradle:ide
compile 'com.squareup.picasso:picasso:2.5.2'
Maven:this
<dependency> <groupId>com.squareup.picasso</groupId> <artifactId>picasso</artifactId> <version>2.5.2</version> </dependency>
最簡單的使用:url
Picasso.with(context).load("http://i.imgur.com/DvpvklR.png").into(imageView);
能夠加載的資源不少:
Resources, assets, files, content providers are all supported as image sources.
Picasso.with(context).load(R.drawable.landing_screen).into(imageView1); Picasso.with(context).load("file:///android_asset/DvpvklR.png").into(imageView2); Picasso.with(context).load(new File(...)).into(imageView3);
若是想直接獲取bitmap
private Target target = new Target() { @Override public void onBitmapLoaded(Bitmap bitmap, Picasso.LoadedFrom from) { //獲取到bitmap,進行處理 } @Override public void onBitmapFailed() { } } private void someMethod() { Picasso.with(this).load("url").into(target); } @Override public void onDestroy() { // could be in onPause or onStop Picasso.with(this).cancelRequest(target); super.onDestroy(); }
在適配器中使用:
@Override public void getView(int position, View convertView, ViewGroup ) { Picasso.with(context).load(url).into(view);//這裏注意Picasso.with(context)應該提取到外面,不該該被重複執行,不然可能出現Bug }
設置圖片的大小及填充方式
Picasso.with(context) .load(url) .resize(50, 50) //設置大小 .centerCrop() //設置填充方式,這個是推薦的 .into(imageView)
指定加載完成以前顯示的圖片和加載出錯顯示的圖片:
Picasso.with(context) .load(url) .placeholder(R.drawable.user_placeholder) .error(R.drawable.user_placeholder_error) .into(imageView);
定製圖片的轉換方式
public class CropSquareTransformation implements Transformation { @Override public Bitmap transform(Bitmap source) { int size = Math.min(source.getWidth(), source.getHeight()); int x = (source.getWidth() - size) / 2; int y = (source.getHeight() - size) / 2; Bitmap result = Bitmap.createBitmap(source, x, y, size, size);//這個是用來裁剪的圖片的 if (result != source) { source.recycle();//這裏必須回收 } return result; } @Override public String key() { //這個方法返回的key應該是惟一的,用來做爲緩存的鍵 return "square()"; } }
使用變換:
picasso.load(R.drawable.download) .skipMemoryCache() //不要把加載的圖片放入緩存,也不要從緩存中取圖片 .transform(new CropSquareTransformation()) //執行自定義變換 .into(view);
加載圖片並自定義動做
Target target = new Target(){ @Override public void onBitmapLoaded(Bitmap bitmap, Picasso.LoadedFrom loadedFrom) { //當圖片加載成功時調用,bitmap是加載的圖片,loadFrom 標明圖片的來源是網絡、內存仍是磁盤 //能夠在裏面執行把圖片保存到本地的操做 } @Override public void onBitmapFailed(Drawable errorDrawable) { //當圖片加載失敗時調用 } @Override public void onPrepareLoad(Drawable placeHolderDrawable) { //當任務被提交時調用 } }; picasso.load(new File("/1.jpg")).into(target); //指定target任務加載圖片
加載圖片到 ImageView:
ImageView view = null; Picasso picasso = Picasso.with(this); picasso.setIndicatorsEnabled(true); //開啓調模式,它可以在圖片左上角顯示小三角形,這個小三角形的顏色標明瞭圖片的來源:網絡、內存緩存、磁盤緩存 picasso.setLoggingEnabled(true); //打開日誌,即log中會打印出目前下載的進度、狀況 picasso.load("http://xxx.jpg") //能夠是本地圖片或網絡圖片 .placeholder(R.drawable.placeholder) //當圖片正在加載時顯示的圖片(optional) .error(R.drawable.error) //當圖片加載失敗時顯示的圖片(optional) .into(view, new Callback() { //將圖片下載完後放進view中,回調是可選的 @Override public void onSuccess() { //加載圖片成功時回調 } @Override public void onError() { //加載圖片失敗時回調 } });
開發者能夠打開調試功能: 打開以後若是圖片是從網絡中得到,則圖片左上角會有紅色三角形;若是圖片從磁盤得到,則圖片左上角會有黃色三角形;若是圖片從內存得到,則圖片左上角會有綠色三角形。如圖所示: