Android圖片加載庫:最全面的Picasso講解

hadescen 8年前發布 | 67K 次閱讀 安卓開發 Android開發 移動開發

前言

  • 上文已經對當今 Android主流的圖片加載庫 進行了全面介紹 & 對比

    如果你還沒閱讀,我建議你先移步這里閱讀

  • 今天我們來學習其中一個Android主流的圖片加載庫的使用 - Picasso

目錄

目錄

1. 簡介

  • 介紹:Picasso,可譯為“畢加索”,是Android中一個圖片加載開源庫

    大概是因為其使用使用方法簡單、優雅所以這樣取名

  • 主要作用:實現圖片加載

2. 功能特點

2.1 功能列表

功能列表

  • 從上面可以看出,Picasso不僅實現了圖片異步加載的功能,還解決了Android中加載圖片時需要解決的一些常見問題

  • 接下來,我會對Picasso的每個功能點進行詳細的介紹

2.2 功能介紹

2.2.1 圖片的異步加載(最基礎功能)

ImageView targetImageView = (ImageView) findViewById(R.id.ImageView);
        String Url = "http://218.192.170.132/1.jpg";

//Picasso使用了流式接口的調用方式
//Picasso類是核心實現類。
//實現圖片加載功能至少需要三個參數:
        Picasso
//with(Context context)
//Context對于很多Android API的調用都是必須的,這里就不多說了
                .with(context)

//load(String imageUrl):被加載圖像的Url地址。
//大多情況下,一個字符串代表一個網絡圖片的URL。
                .load(Url)

//into(ImageView targetImageView):圖片最終要展示的地方。
                .into(targetImageView);

2.2.2 圖片轉換

使用最少的內存完成復雜的圖片轉換,轉換圖片以適合所顯示的ImageView,來減少內存消耗

Picasso.with(context)
  .load(url)
//裁剪圖片尺寸
  .resize(50, 50)
//設置圖片圓角
  .centerCrop()
  .into(imageView)

2.2.3 加載過重 & 錯誤處理

Picasso支持加載過程中和加載錯誤時顯示對應圖片

Picasso.with(context)
    .load(url)
//加載過程中的圖片顯示
    .placeholder(R.drawable.user_placeholder)
//加載失敗中的圖片顯示
//如果重試3次(下載源代碼可以根據需要修改)還是無法成功加載圖片,則用錯誤占位符圖片顯示。
    .error(R.drawable.user_placeholder_error)
    .into(imageView);

2.2.4 在Adapter中的回收不在視野的ImageView和取消已經回收的ImageView下載進程

@Override 
public void getView(int position, View convertView, ViewGroup parent) {
  SquaredImageView view = (SquaredImageView) convertView;
  if (view == null) {
    view = new SquaredImageView(context);
  }
  String url = getItem(position);

  Picasso.with(context).load(url).into(view);
}

2.2.5 從不同資源源加載

支持多種數據源 網絡、本地、資源、Assets 等

//加載資源文件
Picasso.with(context).load(R.drawable.landing_screen).into(imageView1);
//加載本地文件
Picasso.with(context).load(new File("/images/oprah_bees.gif")).into(imageView2);

2.2.6 自動添加磁盤和內存二級緩存功能

2.2.7 支持優先級處理

每次任務調度前會選擇優先級高的任務,比如 App 頁面中 Banner 的優先級高于 Icon 時就很適用。

2.2.8 支持飛行模式、并發線程數根據網絡類型而變

手機切換到飛行模式或網絡類型變換時會自動調整線程池最大并發數,比如 wifi 最大并發為 4, 4g 為 3,3g 為 2

2.2.9 “無”本地緩存

無”本地緩存,不是說沒有本地緩存,而是 Picasso 自己沒有實現,交給了 Square 的另外一個網絡庫 okhttp 去實現,這樣的好處是可以通過請求 Response Header 中的 Cache-Control 及 Expired 控制圖片的過期時間。

3. Demo實例

沒有Demo的代碼講解不是好文章,讓我們來一步步學會使用Picasso。

步驟1:在gradle添加依賴

compile 'com.squareup.picasso:picasso:2.5.2'

步驟2:添加網絡權限

<uses-permission android:name="android.permission.INTERNET"/>

步驟1和步驟2是Picasso使用的前提,千萬別忘了!!!!

步驟3:在MainActivity中

ImageView targetImageView = (ImageView) findViewById(R.id.ImageView);
        String Url = "http://218.192.170.132/1.jpg";

        Picasso
                .with(this)
                .load(Url)
                .into(targetImageView);

還有具體其他功能需要配置的自己按照我上面寫的進行配置就好了~

這里再貼上Picasso的Github地址: 請點擊這里

4. 特點

4.1 優點

  • 使用簡單、方便(一行代碼的事情)

  • 由于同樣是出品自Square的,Square 公司的其他開源庫如 Retrofit 或者 OkHttp和Picasso搭配使用兼容性會更好些,占用體積也會少些

    所以,如果項目已經使用了 Square 公司的其他開源庫(如 Retrofit 或者 OkHttp),在滿足需求的前提下建議使用Picasso

4.2 缺點

  • 功能較為簡單-圖片加載;

  • 性能(加載速度等等)較其他圖片加載庫(Glide、Fresco)較差

  • 自身無實現“本地緩存”

 

 

來自:http://www.jianshu.com/p/51dc758b52f9

 

 本文由用戶 hadescen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!