Picasso是Square公司開源的一個Android圖形緩存庫, 可以實現圖片加載(本地和網絡)和緩存功能。
地址:http://square.github.io/picasso/
jar包下載: Picasso.jar
Paicsso可以實現圖片的很多功能,drawable/mipmap下圖片加載,SD卡圖片加載,網絡圖片加載(可自己設置是否緩存),圖片裁剪等。
Picasso實現了圖片的異步加載,並解決了Android中加載圖片時常見的一些問題,它有以下特點:
- 在Adapter中取消了不在視圖范圍內的ImageView的資源加載,因為可能會產生圖片錯位;
- 使用復雜的圖片轉換技術降低內存的使用
- 自帶內存和硬盤的二級緩存機制
效果如圖:
1:加載本地圖片
int resourceId = R.mipmap.ic_launcher; Picasso.with(this).load(resourceId).into(iv1);
2:加載SD卡圖片
File file = new File(path2); Picasso.with(this).load(file).into(iv2);
3:普通加載網絡圖片
Picasso.with(this).load("http://img.my.csdn.net/uploads/201407/26/1406383243_5120.jpg").into(iv3);
4:加載圖片並裁剪
Picasso.with( this).load("url").resize(99,99).centerInside().into(iv4);
5:初始化圖片和錯誤時的圖片
Picasso.with(this).load("url") .placeholder(R.mipmap.ic_launcher)//默認顯示圖片 .error(R.mipmap.ic_launcher)//加載時出現錯誤顯示的圖片 .into(iv5);
6:加載圖片過大要放棄緩存( Picasso默認會使用設備的15%的內存作為內存圖片緩存,且現有的api無法清空內存緩存。我們可以在查看大圖時放棄使用內存緩存,圖片從網絡下載完成后會緩存到磁盤中,加載會從磁盤中加載,這樣可以加速內存的回收 )
Picasso.with(this).load("url")//查看大圖放棄緩存,加速內存的回收 .memoryPolicy(NO_CACHE, NO_STORE) .into(iv6);
7: 計算出最佳的大小及最佳的圖片質量來進行圖片展示 ( 減少內存 )
Picasso.with(this).load("http://img.my.csdn.net/uploads/201407/26/1406383243_5120.jpg") .fit() .into(img8);
8:自定義圖片控件加載
/** * 重寫ImageView的onDetachedFromWindow方法,在它從屏幕中消失時回調,去掉drawable引用,能加快內存的回收。 * priority()設置圖片加載的優先級 * 如果一個屏幕上頂部圖片較大,而底部圖片較小,因為Picasso是異步加載,所以小圖會先加載出來,但是對於用戶來說,更希望看到的是上面的圖片先加載, * 底部的圖片后加載,Picasso支持設置優先級,分為HIGH, MEDIUM, 和 LOW,所有的加載默認優先級為MEDIUM; */ Picasso.with(this).load("http://img.my.csdn.net/uploads/201407/26/1406383243_5120.jpg") .priority(HIGH) .into(recyclerImageView);
9:列表加載(.tag的使用)
Picasso.with(context).load("url"]) .tag("RecyclerView") //參數為 Object .into(viewHolder.imageView);
補充:
//因為圖片的旋轉都是相對(0,0)進行操作,所以如果我們想自定義相對於某個點,也是可以的,只需要調用 //.rotate(float degrees, float pivotX, float pivotY) Picasso.with(context).load("url").rotate(90f) //旋轉90度 .into(imageViewSimpleRotate);
新進程中查看大圖
列表頁的內存已經非常穩定,但是查看大圖時,大圖往往占用了20+m內存,加上現有進程中的內存,非常容易oom,在新進程中打開Activity成為比較取巧的避免oom的方式。
<activity android:name=".DetailActivity" android:process=":picture"/>
添加程序所需要的依賴:
compile 'com.squareup.picasso:picasso:2.5.2'
AndroidManifest.xml添加權限
<uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> <uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS" /> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
源碼點擊下載
Android之網絡圖片框架UniversalImageLoader和結合LruCache緩存圖片
Android之Fresco(facebook的強大Android圖片加載的框架)