Android-Volley
ImageView設(shè)置圖片源
/**
* imageView是一個(gè)ImageView實(shí)例
* ImageLoader.getImageListener的第二個(gè)參數(shù)是默認(rèn)的圖片resource id
* 第三個(gè)參數(shù)是請(qǐng)求失敗時(shí)候的資源id,可以指定為0
*/
ImageListener listener = ImageLoader.getImageListener(imageView,
android.R.drawable.ic_menu_rotate, android.R.drawable.ic_delete);
mImageLoader.get(url, listener);
NetworkImageView
Volley提供了一個(gè)新的控件NetworkImageView來代替?zhèn)鹘y(tǒng)的ImageView,這個(gè)控件的圖片屬性可以通過 來設(shè)定。
而且,這個(gè)控件在被從父控件detach的時(shí)候,會(huì)自動(dòng)取消網(wǎng)絡(luò)請(qǐng)求的,即完全不用我們擔(dān)心相關(guān)網(wǎng)絡(luò)請(qǐng)求的生命周期問題。
mImageView.setImageUrl(url, imageLoader)
mImageLoader = new ImageLoader(mRequestQueue, new BitmapLruCache());
if (holder.imageRequest != null) {
holder.imageRequest.cancel();
}
holder.imageRequest = mImageLoader.get(BASE_UR + item.image_url, holder.imageView, R.drawable.loading, R.drawable.error);
總結(jié):如果你的工程項(xiàng)目,是一個(gè)比較小的項(xiàng)目,或者要求不是很高的項(xiàng)目,處理比較簡單的可以使用這個(gè)庫,這個(gè)庫是Google 2013 I/O 發(fā)布的一個(gè)開源庫。使用這個(gè)庫在圖片的處理上,沒有提供任何的圖片處理的操作,個(gè)人感覺這個(gè)庫主要在網(wǎng)絡(luò)數(shù)據(jù)連接上比較好,在圖片處理上還是不夠完善,強(qiáng)大。
Picasso
http://square.github.io/picasso/
Picasso加載網(wǎng)絡(luò)圖片的使用很簡單,只需要一行代碼就可以搞定。
1. Picasso.with(context) .load(url).resize(50, 50).centerCrop().into(imageView)
Picasso有如下特性:
- 處理Adapter中的 ImageView 回收和取消已經(jīng)回收ImageView的下載進(jìn)程
- 使用最少的內(nèi)存完成復(fù)雜的圖片轉(zhuǎn)換,比如把下載的圖片轉(zhuǎn)換為圓角等
- 自動(dòng)添加磁盤和內(nèi)存緩存
總結(jié):如果你的項(xiàng)目里面,對(duì)于圖片有一些具體的要求的話,建議使用這個(gè)庫,但是這個(gè)庫當(dāng)你需要對(duì)圖片作一些具體的操作比如加載圓角矩形圖片、裁剪圖片為圓形時(shí),需要你自己寫一些操作,如果基礎(chǔ)不夠好的會(huì)感覺很困難。還有就是這個(gè)庫我們只能看到結(jié)果,無法關(guān)心圖片的下載過程。
Universal-ImageLoader
- 先要配置ImageLoaderConfiguration這個(gè)類實(shí)現(xiàn)全局ImageLoader的實(shí)現(xiàn)情況。可以選擇在Application中初始化設(shè)置該類。
- 使用ImageLoader進(jìn)行圖片加載的時(shí)候,先要實(shí)例化ImageLoader
總結(jié):這個(gè)庫有著對(duì)加載網(wǎng)絡(luò)圖片的吵詳細(xì)配置。可以根據(jù)個(gè)人的喜歡,進(jìn)行一些配置等等。并且可以實(shí)現(xiàn)圖片下載過程的監(jiān)聽。且可以支持圖片下載完成后,顯示圓形或者圓角矩形的圖片。
Glide
https://muyangmin.github.io/glide-docs-cn/#glide-v4-android-english-tip
Glide 是一個(gè)高效、開源、 Android設(shè)備上的媒體管理框架,它遵循BSD、MIT以及Apache 2.0協(xié)議發(fā)布。Glide具有獲取、解碼和展示視頻劇照、圖片、動(dòng)畫等功能,它還有靈活的API,這些API使開發(fā)者能夠?qū)lide應(yīng)用在幾乎任何網(wǎng)絡(luò)協(xié)議棧里。創(chuàng)建Glide的主要目的有兩個(gè),一個(gè)是實(shí)現(xiàn)平滑的圖片列表滾動(dòng)效果,另一個(gè)是支持遠(yuǎn)程圖片的獲取、大小調(diào)整和展示。近日,Glide 3.0發(fā)布,現(xiàn)已提供 jar包下載 ,同時(shí)還支持使用Gradle以及Maven進(jìn)行構(gòu)建。該版本包括很多值得關(guān)注的新功能,如支持Gif 動(dòng)畫和視頻劇照解碼、智能的暫停和重新開始請(qǐng)求、支持縮略圖等,具體新增功能如下
如下:
GIF 動(dòng)畫的解碼 :通過調(diào)用Glide.with(context).load(“圖片路徑“)方法,GIF動(dòng)畫圖片可以自動(dòng)顯示為動(dòng)畫效果。如果想有更多的控制,還可以使用Glide.with(context).load(“圖片路徑“).asBitmap()方法加載靜態(tài)圖片,使用Glide.with(context).load(“圖片路徑“).asGif()方法加載動(dòng)畫圖片
本地視頻劇照的解碼: 通過調(diào)用Glide.with(context).load(“圖片路徑“)方法,Glide能夠支持Android設(shè)備中的所有視頻劇照的加載和展示
縮略圖的支持: 為了減少在同一個(gè)view組件里同時(shí)加載多張圖片的時(shí)間,可以調(diào)用Glide.with(context).load(“圖片路徑“).thumbnail(“縮略比例“).into(“view組件“)方法加載一個(gè)縮略圖,還可以控制thumbnail()中的參數(shù)的大小,以控制顯示不同比例大小的縮略圖
Activity 生命周期的集成: 當(dāng)Activity暫停和重啟時(shí),Glide能夠做到智能的暫停和重新開始請(qǐng)求,并且當(dāng)Android設(shè)備的連接狀態(tài)變化時(shí),所有失敗的請(qǐng)求能夠自動(dòng)重新請(qǐng)求
轉(zhuǎn)碼的支持: Glide的toBytes() 和transcode() 兩個(gè)方法可以用來獲取、解碼和變換背景圖片,并且transcode() 方法還能夠改變圖片的樣式
動(dòng)畫的支持: 新增支持圖片的淡入淡出動(dòng)畫效果(調(diào)用crossFade()方法)和查看動(dòng)畫的屬性的功能
OkHttp 和Volley 的支持: 默認(rèn)選擇HttpUrlConnection作為網(wǎng)絡(luò)協(xié)議棧,還可以選擇OkHttp和Volley作為網(wǎng)絡(luò)協(xié)議棧
其他功能: 如在圖片加載過程中,使用Drawables對(duì)象作為占位符、圖片請(qǐng)求的優(yōu)化、圖片的寬度和高度可重新設(shè)定、縮略圖和原圖的緩存等功能
另外,請(qǐng)大家注意,除了以上新引入的功能外,還具有Glide 2.x系列版本的所有功能,如背景圖片的加載、內(nèi)存和磁盤間的高效緩存、使用位圖和資源池提高加載性能, 更多Glide3.0相關(guān)信息請(qǐng)登陸GitHub上的 Wiki頁面 查看。
Fresco
https://www.fresco-cn.org/
Facebook最近推出了一款用于Android應(yīng)用中展示圖片的強(qiáng)大圖片庫Fresco,它能夠從網(wǎng)絡(luò)、本地存儲(chǔ)和本地資源中加載圖片。而且,為了節(jié)省數(shù)據(jù)和CPU,它擁有三級(jí)緩存。
Fresco 是一個(gè)強(qiáng)大的圖片加載組件。
Fresco 中設(shè)計(jì)有一個(gè)叫做 image pipeline 的模塊。它負(fù)責(zé)從網(wǎng)絡(luò),從本地文件系統(tǒng),本地資源加載圖片。為了最大限度節(jié)省空間和CPU時(shí)間,它含有3級(jí)緩存設(shè)計(jì)(2級(jí)內(nèi)存,1級(jí)文件)。
Fresco 中設(shè)計(jì)有一個(gè)叫做 Drawees 模塊,方便地顯示loading圖,當(dāng)圖片不再顯示在屏幕上時(shí),及時(shí)地釋放內(nèi)存和空間占用。
Fresco 支持 Android2.3(API level 9) 及其以上系統(tǒng)。
特性
內(nèi)存管理
解壓后的圖片,即Android中的Bitmap,占用大量的內(nèi)存。大的內(nèi)存占用勢必引發(fā)更加頻繁的GC。在5.0以下,GC將會(huì)顯著地引發(fā)界面卡頓。
在5.0以下系統(tǒng),F(xiàn)resco將圖片放到一個(gè)特別的內(nèi)存區(qū)域。當(dāng)然,在圖片不顯示的時(shí)候,占用的內(nèi)存會(huì)自動(dòng)被釋放。這會(huì)使得APP更加流暢,減少因圖片內(nèi)存占用而引發(fā)的OOM。
Fresco 在低端機(jī)器上表現(xiàn)一樣出色,你再也不用因圖片內(nèi)存占用而思前想后。
圖片的漸進(jìn)式呈現(xiàn)
漸進(jìn)式的JPEG圖片格式已經(jīng)流行數(shù)年了,漸進(jìn)式圖片格式先呈現(xiàn)大致的圖片輪廓,然后隨著圖片下載的繼續(xù),呈現(xiàn)逐漸清晰的圖片,這對(duì)于移動(dòng)設(shè)備,尤其是慢網(wǎng)絡(luò)有極大的利好,可帶來更好的用戶體驗(yàn)。
Android 本身的圖片庫不支持此格式,但是Fresco支持。使用時(shí),和往常一樣,僅僅需要提供一個(gè)圖片的URI即可,剩下的事情,F(xiàn)resco會(huì)處理。
Gif圖和WebP格式
是的,支持加載Gif圖,支持WebP格式。
圖像的呈現(xiàn)
Fresco 的 Drawees 設(shè)計(jì),帶來一些有用的特性:
- 自定義居中焦點(diǎn)(對(duì)人臉等圖片顯示非常有幫助)
- 圓角圖,當(dāng)然圓圈也行。
- 下載失敗之后,點(diǎn)擊重現(xiàn)下載
- 自定義占位圖,自定義overlay, 或者進(jìn)度條
- 指定用戶按壓時(shí)的overlay
圖像的加載
Fresco 的 image pipeline 設(shè)計(jì),允許用戶在多方面控制圖片的加載:
- 為同一個(gè)圖片指定不同的遠(yuǎn)程路徑,或者使用已經(jīng)存在本地緩存中的圖片
- 先顯示一個(gè)低解析度的圖片,等高清圖下載完之后再顯示高清圖
- 加載完成回調(diào)通知
- 對(duì)于本地圖,如有EXIF縮略圖,在大圖加載完成之前,可先顯示縮略圖
- 縮放或者旋轉(zhuǎn)圖片
- 處理已下載的圖片
- WebP 支持
總結(jié)
Universal Image Loader:一個(gè)強(qiáng)大的圖片加載庫,包含各種各樣的配置,最老牌,使用也最廣泛。
Picasso: Square出品,和OkHttp搭配起來更配呦!
Volley ImageLoader:Google官方出品,可惜不能加載本地圖片~
Fresco:Facebook出的,天生驕傲!不是一般的強(qiáng)大。
Glide:Google推薦的圖片加載庫,專注于流暢的滾動(dòng),更適合于列表大量圖片。