1. 程式人生 > >圖片載入利器之Picasso(三)進階

圖片載入利器之Picasso(三)進階

這篇文章中我們來繼續學習Picasso中還提供了哪些擴充套件功能,一個好的框架一定是擴充套件性強的,你需要的我剛好有。

下面看一下都提供了哪些擴充套件功能呢?

Picasso內部採用了建造者模式,所以我們只看Builder內部類都提供了哪些方法即可

1 defaultBitmapConfig(Bitmap.Config bitmapConfig)

設定畫素格式,Picasso的預設格式為ARGB_8888,我們知道採用這個值一個畫素佔用4個位元組,可以使用RGB_565來替換,這樣可以節省一半的記憶體開銷,當然圖片質量還是有一定損失的。

2 downloader(Downloader downloader)

自定義下載器,預設OkHttp,具體的實現類是OkHttpDownloader

3 executor(ExecutorService executorService)

執行緒池,預設的實現是PicassoExecutorService, 這裡面會根據不同的網路情況來設定核心執行緒和最大執行緒數,最大為4,最小為1,預設為3.

4 memoryCache(Cache memoryCache)

快取策略,預設實現為LruCache,LRU(最近最少未使用演算法)目前在記憶體快取這塊使用的還是非常廣泛的。

5 listener(Listener listener)

圖片載入失敗的一個回撥事件,回撥方法為onImageLoadFailed(Picasso picasso, Uri uri, Exception exception)

6 requestTransformer(RequestTransformer transformer)

請求的轉換,在request被提交之前進行轉換

7 addRequestHandler(RequestHandler requestHandler)

自定義載入圖片的來源,預設為我們實現了7個,分別如下:

ResourceRequestHandler
ContactsPhotoRequestHandler
MediaStoreRequestHandler
ContentStreamRequestHandler
AssetRequestHandler
FileRequestHandler
NetworkRequestHandler

以上方法的呼叫方式如下

Picasso picasso = new Picasso.Builder(this)
        .defaultBitmapConfig(Bitmap.Config.RGB_565)
        .downloader(downloader)
        .executor(executotService)
        .memoryCache(cache)
        .listener(new Picasso.Listener() {
            @Override
            public void onImageLoadFailed(Picasso picasso, Uri uri, Exception exception) {

            }
        })
        .requestTransformer(new Picasso.RequestTransformer() {
            @Override
            public Request transformRequest(Request request) {
                return null;
            }
        })
        .addRequestHandler(requestHandler)
        .build();
Picasso.setSingletonInstance(picasso);
picasso.load(imageUrl).into(imageView);

在RequestCreator中也有幾個可以自定義的方法,上篇部落格中未涉及到,這裡統一列出來

1 config(Bitmap.Config config)

同上面的defaultBitmapConfig(Bitmap.Config bitmapConfig)效果完全一樣,兩種方式都可以設定,defaultBitmapConfig(Bitmap.Config.RGB_565)傾向於全域性設定,而config(Bitmap.Config.RGB_565)只對單次請求生效

2 transform(Transformation transformation)

圖片轉換,一般我們得到圖片之後,在顯示之前還可以進一步轉換,比如進行一些色彩處理,改變形狀等等。

以上方法的呼叫方式如下

Picasso.with(this)
        .load(imageUrl)
        .config(Bitmap.Config.RGB_565)
        .transform(transform)
        .into(imageView);

RGB_565

好了,到這裡Picasso的功能基本介紹完了,接下來我們將從原始碼的角度去學習內部的實現。

相關推薦

圖片載入利器Picasso

這篇文章中我們來繼續學習Picasso中還提供了哪些擴充套件功能,一個好的框架一定是擴充套件性強的,你需要的我剛好有。 下面看一下都提供了哪些擴充套件功能呢? Picasso內部採用了建造者模式,所以我們只看Builder內部類都提供了哪些方法即可 1

圖片載入利器Picasso查漏補缺

前言 原計劃四篇文章可以完成Picasso的分析,在寫上一篇原始碼分析時,看到了一個Callback的回撥,通過查詢發現,我們之前遺漏了兩個方法,因此新增一篇文章單獨介紹一下,同時回顧一下前幾篇文章的內容。 同步get()方法 get方法的使用非常簡單

圖片載入利器Picasso原始碼解析

看到了這裡,相信大家對Picasso的使用已經比較熟悉了,本篇部落格中將從基本的用法著手,逐步的深入瞭解其設計原理。 Picasso的程式碼量在眾多的開源框架中算得上非常少的一個了,一共只有35個class檔案,但是麻雀雖小,五臟俱全。好了下面跟隨我的腳步

圖片載入利器Picasso基本用法

在上篇文章中我們提到了Picasso的諸多功能,下面我們來分別演示一下這些功能 配置: 在build.gradle中新增引用 dependencies { ... compile 'com.squareup.picasso:pica

Redis操作

Redis進階操作 Redis事務處理 Redis本身支援事務處理,但是這種支援的事務處理本身是存在設計缺陷的,而且與傳統的關係型資料庫的事務處理有些不同,首先先來看一下Redis中的事務支援命令: 1.開啟事務:multi 2.取消事務:disca

rocketmq學習

rocketmq進階 訊息基礎 預設情況下,producer會輪詢的將訊息傳送到每個佇列中(所有broker下的Queue合併成一個List去輪詢),提高系統吞吐力。這樣分佈帶來的問題,就是從全域性上不能做到順序性(很多時候也並不需要全域性上的順序性)。

一個鹹魚的Python爬蟲:爬取網頁圖片

you os.path odin 路徑 生成 存在 parent lose exist 學完Requests庫與Beautifulsoup庫我們今天來實戰一波,爬取網頁圖片。依照現在所學只能爬取圖片在html頁面的而不能爬取由JavaScript生成的圖。所以我找了這個網站

Tensorflow學習Autoencoder圖片降維的結果展示

微信公眾號 實現功能: 在自編碼器(autoencoder)中有編碼器(encoder)和解碼器(decoder)。我們只看 encoder 壓縮的過程,使用它將一個數據集降維到只有兩個Feature時,將資料放入一個二維座標系內。 思路: 我們只顯示 en

HT圖形組件設計

忘記 ive 設計架構 垃圾回收 喜歡 進行 src 支持 優秀 上篇我們通過定制了CPU和內存展示界面,體驗了HT for Web通過定義矢量實現圖形繪制與業務數據的代碼解耦及綁定聯動,這類案例興許文章還會繼續以便大家掌握很多其它的矢量應用場景,本篇我們先切換個話題

python學習使用socketserver進行ftp斷點續傳

def += __init__ con 不存在 不為 local 接收 class 最近學習python到socketserver,本著想試一下水的深淺,采用Python3.6. 目錄結構如下: receive_file和file為下載或上傳文件存放目錄,ftp_clie

nsq源碼閱讀筆記nsqd——diskQueue

hit emp files tro interact 一次 導致 store text diskQueue是backendQueue接口的一個實現。backendQueue的作用是在實現在內存go channel緩沖區滿的情況下對消息的處理的對象。 除了diskQueue外

2017年最新企業面試題shell

2017年最新企業面試題之shell(三)2017年最新企業面試題之shell(三)練習題1:寫一個shell腳本,類似於日誌切割,系統有個logrotate程序,可以完成歸檔。但現在我們要自己寫一個shell腳本實現歸檔。舉例: 假如服務的輸出日誌是1.log,我要求每天歸檔一個,1.log第二天就變成1.

Spring學習bean註解管理AOP操作

spec resource 自定義屬性 開始 java framework XML 方法名 jar包 在類上面、方法上面、屬性上面添加註解;並用bean來管理; 書寫方法:@註解名稱(屬性名稱=值) 第一步:導入jar包   導入spring-aop.jar(spri

JavaScript的引用類型Object類型和Array類型

reverse 代碼 -1 替換 fine 設置 sha unshift sum 引用類型 Object類型 function a(num){ if(num>3){ a(--num); } console.log(num);

初識vue.js,我的學習

學習 定義 我想 red spa pos console gpo con vue之自定義指令 像v-if、v-show、等這些都是系統指令,比如說我想寫一個v-color的指令,但是系統是沒有這個指令的,如果我們直接這樣寫肯定會報錯,所以我們下面就需要自定義指令

Openstack鏡像服務Glance

ria 認證 su - -a 屬性 端口 開機 更改 created Glance的概述 Glance是為虛擬機的創建提供鏡像的服務,我們基於Openstack是構建基本的IaaS平臺對外提供虛擬機,而虛擬機在創建時必須為選擇需要安裝的操作系統,Glance服務就是為該選擇

Ubuntu搭建Hadoop的踩坑

namenode 結束 ctu mapreduce 分布 使用 framework 2.6 start 之前的兩篇文章介紹了如何從0開始到搭建好帶有JDK的Ubuntu的過程,本來這篇文章是打算介紹搭建偽分布式集群的。但是後來想想反正偽分布式和完全分布式差不多,所幸直接介紹

Python學習爬蟲

版權 特殊 機器人 zhang col 取出 log arch robots 通用爬蟲和聚焦爬蟲 根據使用場景,網絡爬蟲可分為 通用爬蟲 和 聚焦爬蟲 兩種. 通用爬蟲 通用網絡爬蟲 是 捜索引擎抓取系統(Baidu、Google、Yahoo等)的重要組成部分。主要目

Hive學習Hive元數據信息對應MySQL數據庫表

需要 pri from metastore node rom lazy 測試 安裝 概述 Hive 的元數據信息通常存儲在關系型數據庫中,常用MySQL數據庫作為元數據庫管理。上一篇hive的安裝也是將元數據信息存放在MySQL數據庫中。 Hive的元數據信息在MySQ

Vue 爬坑—— 使用 vue-router 跳轉頁面

cli 分類 ace local outer log 適合 創建 start 使用 Vue.js 做項目的時候,一個頁面是由多個組件構成的,所以在跳轉頁面的時候,並不適合用傳統的 href,於是 vue-router 應運而生。 官方文檔: https://router.v