編輯:關於Android編程
picasso是Square公司開源的一個Android圖形緩存庫,地址http://square.github.io/picasso/,可以實現圖片下載和緩存功能。
picasso有如下特性:
1.picasso的簡單使用:
1 Picasso.with(context).load(url).placeholder(R.drawable.pic).error(R.drawable.pic).into(tagert); 需要注意:url為http鏈接時,load(url),當url為本地圖片路徑時load(new File(url)). 需要對圖片簡單處理:transform(Transformation); 如下是顯示圓形圖片
//重載函數 public Bitmap transform(Bitmap source) { int width = source.getWidth(); int height = source.getHeight(); int x = 0, y = 0; if (mSquareRound && width != height) { if (width < height) { y = (height - width)/2; } else { x = (width - height)/2; } width = height = Math.min(width, height); Bitmap tempSource = Bitmap.createBitmap(source, x, y, width, height); source.recycle(); source = tempSource; } Bitmap output = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888); Paint paint = new Paint(); paint.setDither(true); paint.setAntiAlias(true); BitmapShader shader = new BitmapShader(source, Shader.TileMode.CLAMP, Shader.TileMode.CLAMP); paint.setShader(shader); Canvas canvas = new Canvas(output); final RectF bounds = new RectF(0, 0, width, height); canvas.drawOval(bounds, paint); source.recycle(); return output; }
transform(new RoundTransformation(true));
2.picasso的類圖如下:
關鍵類的簡單介紹:
Cache:緩存類,子類LruCache才采用Least Recently Used 近期最少使用算法,當然LinkedHashMap已實現這個策略,只需根據配置的緩存大小來trimToSize。
picass緩存策略單一,沒有另一個圖片下載緩存庫 Android-universal-Image-Loader 緩存策略豐富:FIFOLimitedMemZ喎?/kf/ware/vc/" target="_blank" class="keylink">vcnlDYWNoZQogo6xMaW1pdGVkQWdlTWVtb3J5Q2FjaGUgtcihozwvcD4KPHA+Crb4sb612M7EvP67urTmo6xwaWNhc3Nv0v3Tw29raHR0cLXEzsS8/ru6tOajrLb4QW5kcm9pZC11bml2ZXJzYWwtSW1hZ2UtTG9hZGVy0rKyu82svLjW1s7EvP67urTmst/C1KGjPC9wPgo8cD4KIDwvcD4KPHA+ClJlcXVlc3RDcmVhdG9yOlJlcXVzdLm5vajV36Osv8nS1M2ouf2yu82sss7K/cXk1sNyZXF1ZXN0x+vH86GjPC9wPgo8cD4KUmVxdWVzdDrH68fzt+LXsMDgo6zWrrrzsNHL+dPQttTNvNDOtcSy2df3try74bzHwrzU2tXiwO+jrLmp1q6688280M61xLS0vajKudPDo6zI59bY0MK8xsvjtPPQoaOs0P3Xqr3HtsijrNKyv8nS1NfUtqjS5bHku7ujrNa70OjSqsq1z9ZUcmFuc2Zvcm1hdGlvbqOs0ru49mJpdG1hcNequ7u1xL3Tv9qho7Srtb3B7dK7uPa94bm51tBBY3Rpb26hozwvcD4KPHA+CkFjdGlvbjpBY3Rpb260+rHtwcvSu7j2vt/M5bXEvNPU2MjOzvGjrNb30qrTw9PazbzGrLzT1Ni687XEveG5+7vYtfejrNPQwb249rPpz/O3vbeoo6xjb21wbGV0ZbrNZXJyb3IuwLTNqNaqyc+y46GjPC9wPgo8cD4KQml0bWFwSHVudGVyOtK7uPZydW5uYWJsZc/fs8yjrM34wufPwtTYusS5pNf3z9+zzKOsvbu4+EV4ZWN1dG9yU2VydmVyudzA7da00NChozwvcD4KPHA+CkRvd25sb2FkZXI6zfjC5828xqzPwtTYxvejrNfTwOCyu82swLTRodTxaHR0cCBjbGllbnShozwvcD4KPHA+ClJlcXVlc3RIYW5kbGVyOsfrx/O0psDtwOCjrNfTwOC4+b7dzbzGrMC01LS78cih18rUtKGjPC9wPgo8cD4KRGlzcGF0aGNlcjrIzs7xtfe2yMb3o6y197bIus3OrLuk1d9hY3Rpb25zILrNIGJpdG1hcEh1bnRlciy1sWJpdG1hcGh1bnRlcrvxyKG1vc28xqzKsaOsu+HXqrj4ZGlzcGF0aGVyo6y3osvN0uyyvc/7z6KjrNfu1tW74WFjdGlvbi5jb21wbGV0ZSgpu/LV32FjdGlvbi5lcnJvcigpLjwvcD4KPHA+CiA8L3A+CjxwPgo8c3Ryb25nPjMucGljYXNzby53aXRoKGNvbnRleHQpLmxvYXIoaHR0cCkuaW50byhpbWFnZXZpZXcpO8H3s8zNvMjnz8I8L3N0cm9uZz48L3A+CjxwPgo8aW1nIHNyYz0="/uploadfile/Collfiles/20141203/2014120309104861.png" alt="\">
4.使用picasso可能出現的問題:
1.圖片有時會顯示不了,查看應用中圖片緩存文件,對一張圖片,會生成兩個文件:,.0文件保存了http響應相應的信息,.1文件時加密後的圖片文件。.0文件的內容如下:
http://192.168.2.40:82/group1/M00/0A/60/wKgCKFQJQkKABEn9AAPhsEdiW-o.phpzqf GET 0 HTTP/1.1 200 OK 9 Server: nginx/1.2.6 Date: Tue, 16 Sep 2014 12:02:26 GMT Content-Length: 254384 Last-Modified: Fri, 05 Sep 2014 04:55:30 GMT Connection: keep-alive Accept-Ranges: bytes OkHttp-Selected-Protocol: http/1.1 OkHttp-Sent-Millis: 1410868547182 OkHttp-Received-Millis: 1410868547357
這邊出現問題時,Content-Length: 0,但是圖片確實存在。如果出現有時顯示不了,可以從這方面查看下。可行的方法:
定制Downloader,配置緩存目錄和緩存大小。
2.當picasso顯示列表中大量圖片時,查看大圖時,有時還是會出現oom,除了對長寬比壓縮,也可以以另外一個進程查看大圖。
注:本文是我早些時候在eoe上發布的一篇文章 由於每個應用程序都運行在自己的進程空間,並且可以從應用程序UI運行另一個服務進程,而且經常會在不同的進程間傳遞對象
在應用開發中,有時我們需要用代碼計算布局的高度,可能需要減去狀態欄(status bar)的高度。狀態欄高度定義在Android系統尺寸資源中stat
在介紹跨程序進程間通信AIDL前,先看一下本程序activity與某個服務是怎麼綁定在一起進行交互的。需求:服務有兩個方法。分別是播放音樂與停止播放音樂。該程序的活動要訪
1.回顧上篇學習了 Android 系統服務的 10個實例 ,當然 還有更多的系統服務沒有使用;留下來的遺憾就是,昨晚沒有將demo下載地址分享出去; &nbs