图片框架Picasso的简单使用
Picasso?是Square公司開源的一個Android圖形緩存庫,實現圖片下載和緩存功能。
官網地址:http://square.github.io/picasso/
下載地址:https://repo1.maven.org/maven2/com/squareup/picasso/picasso/
在線API:http://square.github.io/picasso/2.x/picasso/
?
Picasso不僅實現了圖片異步加載的功能,還解決了android中加載圖片時需要解決的一些常見問題。
Picasso主要有以下特點:
?
1.在adapter中取消不在視野范圍的ImageView圖片資源加載,解決了圖片錯位的問題;
?
2.使用最少的內存完成圖片的轉換;
3.實現的內存緩存和磁盤緩存。
4.圖形的轉換,比如大小、旋轉等;
5.加載網絡圖片和本地圖片。
?
Picasso使用起來相對于一般的圖片下載也非常的簡單:
一般圖片下載主要有以下幾個步驟:
1.使用異步任務加載圖片(如:Handler + Thread),獲取圖片資源;
?
2.是一個BitmapFactory對圖片進行解碼,轉換成Bitmap對象;
?
3.將圖片顯示到ImageView。
?
Picasso的簡單使用
① 一行代碼即可完成圖片的加載和顯示:
?
Picasso.with(context).load("http://img15.3lian.com/2015/h1/294/d/9.jpg").into(imageView);當然在使用Picasso需要導入Picasso的包,如果是使用Eclipse開發,就通過上面提供的地址下載jar包,然后導入到項目中,如果是使用Android studio進行開發,就可以直接通過一下方式即可:
?
dependencies {// ... 項目中使用的其他包或庫compile 'com.squareup.picasso:picasso:2.5.2' }另外一定要記得添加網絡訪問權限:
?
<uses-permission android:name="android.permission.INTERNET"/>?
?
② Picasso不僅可以加載網絡圖片,也可以加載本地(資源)文件圖片:
?
?
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);?
?
?
③?輕易實現圖形的轉換:
?
// 指定圖片大小 Picasso.with(context).load(url).resize(50, 50).centerCrop().into(imageView) // 指定圖片大小并旋轉圖片 Picasso.with(context).load(imgUrl).resize(width, height).centerCrop().rotate(30);.into(imageView);?
?
④ 當ListView、GridView快速滑動時,使用Picasso不加載圖片:
?
absListView.setOnScrollListener(new AbsListView.OnScrollListener() {@Overridepublic void onScrollStateChanged(AbsListView view, int scrollState) {if (scrollState == SCROLL_STATE_IDLE || scrollState == SCROLL_STATE_TOUCH_SCROLL) {//如果在暫停或者觸摸的情況下開始加載PicassoUtils.newInstance(context).getPicasso().resumeTag(context);} else {//停止加載PicassoUtils.newInstance(context).getPicasso().pauseTag(context);}}@Overridepublic void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) {} });?
⑤ 指定正在加載和加載失敗顯示的圖片:
?
Picasso.with(context).load(url).placeholder(R.drawable.user_placeholder).error(R.drawable.user_placeholder_error).into(imageView);?
?
⑥ 還可以自定義圖形變換:
?
/*** 變換圖片對象*/ public class ChangeTransformation implements Transformation {@Overridepublic Bitmap transform(Bitmap source) {// 將圖片變換為圓形顯示int width = source.getWidth();int height = source.getHeight();int centerX = width / 2;int centerY = height / 2;int radius = Math.min(width, height) / 2;Bitmap result = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888);Paint paint = new Paint(Paint.ANTI_ALIAS_FLAG);Canvas canvas = new Canvas(result);canvas.drawCircle(centerX, centerY, radius, paint);paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.SRC_IN));canvas.drawBitmap(source, 0, 0, paint);if (result == null) {result = source;}source.recycle();return result;}@Overridepublic String key() {// 返回一個唯一鍵用作緩存的目的return "change_transform - " + System.currentTimeMillis() + " - " + random.nextLong();} }?
關于Picasso更多的方法可以查看官方API文檔,地址:http://square.github.io/picasso/2.x/picasso/
?
?
下面是一個簡單的例子,效果圖如下(因為上傳的大小限制了,所以作為兩張圖片上傳):
? ? ? ? ? ? ??
效果就是這樣,下面說一下這個Demo代碼的一些地方,主要是寫了幾個工具類:
1.Picasso的工具類PicassoUtils
這個類使用單例設計模式,全局使用一個,也就是全局使用一個Picasso對象,在Demo中我是在基類(BaseActivity)中初始化的;在PicassoUtils這個類中封裝了一些加載圖片的方法,加載圖片時調用一個方法即可;另外在這個類中寫了一個圖形裝換的方法的內部類,可以將圖片轉換為圓形和指定圓角大小的圓角矩形,其他轉換可以根據需要進行擴展。
2.圖形工具類BitmapUtils
這個類中都是靜態方法,提供了一些對Bitmap對象操作的方法,包括將圖片變為圓角矩形、圓形、對圖片進行壓縮處理、水平翻轉原圖、將彩色圖片變為黑白圖片等一些方法。
3.針對ListView和GridView這類控件類
在這個類中寫了一個方法,調用這個方法,將ListView或GridView傳入就可以實現快速滑動時不加載圖片,手指觸摸滑動或停止滑動時恢復加載圖片。
Android圖片加載框架二次封裝,一行代碼切換底層加載庫:https://github.com/itrenjunhua/ImageLoader
Demo源代碼已經上傳,點擊進入下載頁下載Demo源碼,源碼是一個Android Studio項目,下載之后解壓,直接用Android Studio打開即可,不要導入。
?
總結
以上是生活随笔為你收集整理的图片框架Picasso的简单使用的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: php 建模,php建模(php_uml
- 下一篇: 用DELPHI语言怎么实现发短信功能