Android圖片加載利器之Picasso擴(kuò)展功能
這篇文章中我們來繼續(xù)學(xué)習(xí)Picasso中還提供了哪些擴(kuò)展功能,一個(gè)好的框架一定是擴(kuò)展性強(qiáng)的,你需要的我剛好有。
下面看一下都提供了哪些擴(kuò)展功能呢?
Picasso內(nèi)部采用了建造者模式,所以我們只看Builder內(nèi)部類都提供了哪些方法即可
1 defaultBitmapConfig(Bitmap.Config bitmapConfig)
設(shè)置像素格式,Picasso的默認(rèn)格式為ARGB_8888,我們知道采用這個(gè)值一個(gè)像素占用4個(gè)字節(jié),可以使用RGB_565來替換,這樣可以節(jié)省一半的內(nèi)存開銷,當(dāng)然圖片質(zhì)量還是有一定損失的。
2 downloader(Downloader downloader)
自定義下載器,默認(rèn)OkHttp,具體的實(shí)現(xiàn)類是OkHttpDownloader
3 executor(ExecutorService executorService)
線程池,默認(rèn)的實(shí)現(xiàn)是PicassoExecutorService, 這里面會(huì)根據(jù)不同的網(wǎng)絡(luò)情況來設(shè)置核心線程和最大線程數(shù),最大為4,最小為1,默認(rèn)為3.
4 memoryCache(Cache memoryCache)
緩存策略,默認(rèn)實(shí)現(xiàn)為L(zhǎng)ruCache,LRU(最近最少未使用算法)目前在內(nèi)存緩存這塊使用的還是非常廣泛的。
5 listener(Listener listener)
圖片加載失敗的一個(gè)回調(diào)事件,回調(diào)方法為onImageLoadFailed(Picasso picasso, Uri uri, Exception exception)
6 requestTransformer(RequestTransformer transformer)
請(qǐng)求的轉(zhuǎn)換,在request被提交之前進(jìn)行轉(zhuǎn)換
7 addRequestHandler(RequestHandler requestHandler)
自定義加載圖片的來源,默認(rèn)為我們實(shí)現(xiàn)了7個(gè),分別如下:
ResourceRequestHandler
ContactsPhotoRequestHandler
MediaStoreRequestHandler
ContentStreamRequestHandler
AssetRequestHandler
FileRequestHandler
NetworkRequestHandler
以上方法的調(diào)用方式如下
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中也有幾個(gè)可以自定義的方法,上篇博客中未涉及到,這里統(tǒng)一列出來
1 config(Bitmap.Config config)
同上面的defaultBitmapConfig(Bitmap.Config bitmapConfig)效果完全一樣,兩種方式都可以設(shè)置,defaultBitmapConfig(Bitmap.Config.RGB_565)傾向于全局設(shè)置,而config(Bitmap.Config.RGB_565)只對(duì)單次請(qǐng)求生效
2 transform(Transformation transformation)
圖片轉(zhuǎn)換,一般我們得到圖片之后,在顯示之前還可以進(jìn)一步轉(zhuǎn)換,比如進(jìn)行一些色彩處理,改變形狀等等。
以上方法的調(diào)用方式如下
Picasso.with(this) .load(imageUrl) .config(Bitmap.Config.RGB_565) .transform(transform) .into(imageView);
好了,到這里Picasso的功能基本介紹完了,接下來我們將從源碼的角度去學(xué)習(xí)內(nèi)部的實(shí)現(xiàn)。
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
Android手勢(shì)密碼的實(shí)現(xiàn)
這篇文章主要介紹了Android手勢(shì)密碼的實(shí)現(xiàn)的相關(guān)資料,需要的朋友可以參考下2016-04-04Android 通過Intent使用Bundle傳遞對(duì)象詳細(xì)介紹
這篇文章主要介紹了Android 通過Intent使用Bundle傳遞對(duì)象詳細(xì)介紹的相關(guān)資料,并附實(shí)例代碼講解,具有一定的參考價(jià)值,需要的朋友可以參考下2016-11-11Android 中WallpaperManager用法實(shí)例
這篇文章主要介紹了Android 中WallpaperManager用法實(shí)例的相關(guān)資料,希望通過本文能幫助到大家實(shí)現(xiàn)這樣的功能,需要的朋友可以參考下2017-09-09Android Handler,Message,MessageQueue,Loper源碼解析詳解
這篇文章主要介紹了Android Handler,Message,MessageQueue,Loper源碼解析詳解,本篇文章通過簡(jiǎn)要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下2021-09-09Android 序列化的存儲(chǔ)和讀取總結(jié)及簡(jiǎn)單使用
這篇文章主要介紹了Android 序列化的存儲(chǔ)和讀取總結(jié)及簡(jiǎn)單使用的相關(guān)資料,Serializable接口和Parcelable接口,本文對(duì)這兩種方式進(jìn)行簡(jiǎn)單的總結(jié)和使用,需要的朋友可以參考下2016-12-12Android實(shí)現(xiàn)在屏幕上移動(dòng)圖片的方法
這篇文章主要介紹了Android實(shí)現(xiàn)在屏幕上移動(dòng)圖片的方法,實(shí)例分析了Android操作圖片的相關(guān)技巧,需要的朋友可以參考下2015-06-06Android利用CircleImageView實(shí)現(xiàn)圓形頭像的方法
這篇文章主要介紹了Android利用CircleImageView實(shí)現(xiàn)圓形頭像的方法,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2016-10-10Android實(shí)現(xiàn)加載時(shí)提示“正在加載,請(qǐng)稍后”的方法
在現(xiàn)在的很多應(yīng)用中,當(dāng)在加載的時(shí)候,如果頁面動(dòng)態(tài)數(shù)據(jù)較多,會(huì)有很長(zhǎng)一段時(shí)間的空白頁面,如果加上這個(gè)頁面正在加載的提示,使得應(yīng)用更加人性化。這篇文章就給大家分享了在 Android實(shí)現(xiàn)加載時(shí)提示“正在加載,請(qǐng)稍后”的方法,有需要的朋友們可以參考借鑒。2016-10-10