1. 程式人生 > >Android學習之圖片非同步載入框架Picasso

Android學習之圖片非同步載入框架Picasso

原創地址:http://mcode114.com/android/network/picasso/

Picasso

Picasso是Square公司開源的一個Android圖形快取庫。可以實現圖片下載和快取功能。僅僅只需要一行程式碼就能完全實現圖片的非同步載入。使用複雜的圖片轉換技術降低記憶體的使用。在adapter中需要取消已經不在視野範圍的ImageView圖片資源的載入。

用法

通過配置gradle配置將Picasso框架引入專案。

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

除了載入網路圖片picasso還支援載入Resources, assets, files, content providers中的資原始檔。

//載入網路圖片
Picasso.with(context).load("http://i.imgur.com/DvpvklR.png").into(imageView1);
//載入Resources資源
Picasso.with(context).load(R.drawable.landing_screen).into(imageView2);
//載入assets資源
Picasso.with(context).load("file:///android_asset/DvpvklR.png").into(imageView3);
//載入files資源
Picasso.with(context).load(newFile(...)).into(imageView4);

Picasso能自動檢測到Adapter的重用,會取消上次的載入

    @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);
    }
轉換圖片以適應佈局大小,來減少記憶體消耗
Picasso.with(context)
  .load(url)
  .resize(50,50)
  .centerCrop()
  .into(imageView)

你還可以指定更高階效果的自定義轉換。

publicclass CropSquareTransformation implementsTransformation {
  @Override
  publicBitmap transform(Bitmap source) {
    intsize = Math.min(source.getWidth(), source.getHeight());
    intx = (source.getWidth() - size) /2;
    inty = (source.getHeight() - size) /2;
    Bitmap result = Bitmap.createBitmap(source, x, y, size, size);
    if(result != source) {
      source.recycle();
    }
    returnresult;
  }
  
  @Overridepublic String key() { return"square()"; }
}

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

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

預設情況下,Android使用ARGB_8888設定圖片質量

Picasso.with( imageView.getContext() )
   .load(url)
   .config(Bitmap.Config.RGB_565)
   .into(imageView);


ALPHA_8:每個畫素佔用1byte記憶體Android中有四種,分別是:

  • ARGB_4444:每個畫素佔用2byte記憶體

  • ARGB_8888:每個畫素佔用4byte記憶體

  • RGB_565:每個畫素佔用2byte記憶體

在開發階段,我們可以通過呼叫setIndicatorsEnabled(true)方法,設定Picasso可以根據圖片來源的不同在圖片上做出不同顏色的標記。

相關推薦

Android學習圖片非同步載入框架Picasso

原創地址:http://mcode114.com/android/network/picasso/ Picasso Picasso是Square公司開源的一個Android圖形快取庫。可以實現圖片下載和快取功能。僅僅只需要一行程式碼就能完全實現圖片的非同步載入。使用複

Android-Image-Loader 圖片非同步載入類庫的使用超(詳細配置)

       這個圖片非同步載入並快取的類已經被很多開發者所使用,是最常用的幾個開源庫之一,主流的應用,隨便反編譯幾個火的專案,都可以見到它的身影。        可是有的人並不知道如何去使用這庫如何進行配置,網上查到的資訊對於剛接觸的人來說可能太少了,下面我就把我使用

Android開發圖片載入快取框架Picasso的領教

Picasso實現了圖片的非同步載入,並解決了Android中載入圖片時常見的一些問題,它有以下特點: 在Adapter中取消了不在檢視範圍內的ImageView的資源載入,因為可能會產生圖片錯

Android圖片載入框架Picasso原始碼解析

個人開發的微信小程式,目前功能是書籍推薦,後續會完善一些新功能,希望大家多多支援! 前言 picasso是Square公司開源的一個Android圖形快取庫,地址http://square.github.io/picasso/,可以實現圖片下載和快取功能。僅

Android圖片載入框架Picasso最全使用教程 一

Picasso介紹 Picasso是Square公司開源的一個Android圖形快取庫 A powerful image downloading and caching library for Android 一個Android下強大的圖片下載快

Android圖片載入框架Picasso的使用

技術要點 基本顯示(非同步載入,圖片壓縮,圖片快取) 載入中和載入錯誤的圖片顯示 設定圖片尺寸(Resize)、縮放(Scale)和裁剪(Crop) 圖片旋轉 設定轉換器 取消預設的記憶體快取 設定快取指示器 請求優先順序設定 圖片還未加載出來時取消

Androidandroid框架區別(網路框架圖片非同步載入與快取框架、資料框架)特點整理

在我們安卓開發中,很多繁瑣的程式碼會很頭疼,編寫程式的週期會增加,因此很多框架都冒出來了,我們在搞懂底層原理之時,我們更應該學會用一些優秀框架來解決複雜程式碼,和繁瑣的重寫程式碼。因為針對最簡單的case,我只需要提供request url,成功時的callba

Android圖片載入框架——Picasso和Glide

       首先說Picasso,Picasso 是 Square 公司的傑作,名字叫「畢加索,充滿文藝氣息,意為載入圖片就像畫畫一樣,是一門藝術。Picasso 不僅具備載入圖片的強大功能,還是如此的簡潔。 Picasso預設的快取分配大小特點:   LRU快取佔應用程

Android圖片載入框架Picasso使用教程 (三)

前面我們對Picasso的用法有了一定得了解,下面就分析一下一些特殊情況下,Picasso的用法. 呼叫.noFade()   Picasso的預設圖片載入方式有一個淡入的效果,如果呼叫了noFade(),載入的圖片將直接顯示在ImageView上 <font

Android圖片載入框架Picasso最全使用教程

Picasso介紹 A powerful image downloading and caching library for Android 一個Android下強大的圖片下載快取庫 Picasso實現了圖片的非同步載入,並解決了Android中載入圖片時常見的一些問題,它有以下特點: 在Adap

Android圖片載入框架Picasso使用教程 (四)

通過前幾篇的學習,我們已經對Picasso的載入圖片的用法有了很深的瞭解,接下來我們開始分析Picasso為我們提供的其他高階功能及記憶體分析,Let’s Go ! (ps:想要獲取更多學習資料可加qq1692250804!)      Picasso進行圖片的旋轉(Ro

Android 圖片載入框架Picasso基本使用和原始碼完全解析

寫在之前 原本打算是每週更新一篇博文,同時記錄一週的生活狀態,但是稍微工作忙一點就顧不上寫部落格了。悲催 還是說下最近的狀況,最近兩週一直在接公司申請的計費點, 沃商店,銀貝殼,微信等等,然後就是不停的被人催促催促,真是一個頭兩個大。在這期間專案組還搞了個A

Android開發listview優化+圖片非同步載入+避免圖片顯示閃爍(修改版)

小鹿路過此地。。心熱之下寫寫Android開發中的listview運用(閒的沒事幹,改動了一點程式碼,但實現功能不變) 小鹿學Android開發已有兩年多了,總算有一點點小收穫,雖算不上大牛大神級人物,但有些東西可以和一家一起分享一起交流一起學習一起進步...。還有,望檢視

Android學習GridView圖片布局適配經驗

statistic style code pop proc lease link csdn ram 開始解說這篇博客之前,我想問一下,當布局相似GridView這樣的

Android中的AsyncTask非同步載入圖片

AsyncTask簡介: AsyncTask的特點是任務在主執行緒之外執行,而回調方法是在主執行緒中執行,這就有效地避免了使用Handler帶來的麻煩。 閱讀 AsyncTask的原始碼可知,AsyncTask是使用java.util.concurrent 框架來管理執行緒

【玩轉cocos2d-x二十三】多執行緒和同步03-圖片非同步載入

cocos2d-x中和Android,Windows都一樣,如果在主執行緒中處理一些耗時操作,那麼主執行緒就會出現阻塞現象,表現在介面上就是卡住,未響應等情況。為了避免這種情況的出現,我們需要在後

Android學習本地檔案的儲存與載入

前言 幾乎所有應用都需要有個地方儲存資料。本篇文章,哥們將實現儲存並載入儲存在裝置上的JSON檔案資料。 為什麼要寫這篇文章呢?說來慚愧,哥們昨晚被讀取本地json檔案的演算法給搞得蛋疼,除錯來除錯去就是不成功,最後在Stack Exchange站點上找到靈

淺談android中非同步載入"取消非同步載入"二

首先,我得解釋一下為什麼我的標題取消非同步載入打引號,這是因為可能最後實現效果並不是你自己想象中的那樣。大家看取消非同步載入,這不是很簡單嗎?AsyncTask中不是有一個cancel方法嗎?直接呼叫該方法不就行了嗎?但是事實上是這樣的嗎?如果真是這樣,我相信我就沒有以寫這

Android經典面試問題:請你設計一套圖片非同步載入快取方案——圖片的三級快取

友情提示:文章最後附有專案原始碼現在,Android有很多優秀的圖片載入框架。例如:Picasso,Glide,Fresco。我們幾乎只要簡單呼叫幾句程式碼就可以很好的實現圖片的載入。很多時候也不需要我們親自去寫圖片載入方案。但是,學習圖片的三級快取策略無論是在面試時,還是對

Android學習如何讀取本地音樂以及圖片

最近做音樂播放器讀取本地音樂這一塊。簡單模仿網易雲音樂的介面。 首先我建議了一個music類 public class music { private long id; private long album_id; privat