android-------非常好的圖片載入框架和快取庫(Picasso)
阿新 • • 發佈:2019-01-26
Picasso是Square公司開源的一個Android圖形快取庫, 可以實現圖片載入(本地和網路)和快取功能。
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之Glide(非常好用的圖片載入框架)