轉(zhuǎn)載請注明出處:http://www.reibang.com/p/795ffdaf7104
這篇文章中我們來繼續(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)為LruCache谓苟,LRU(最近最少未使用算法)目前在內(nèi)存緩存這塊使用的還是非常廣泛的官脓。
5 listener(Listener listener)
圖片加載失敗的一個(gè)回調(diào)事件,回調(diào)方法為onImageLoadFailed(Picasso picasso, Uri uri, Exception exception)
6 requestTransformer(RequestTransformer transformer)
請求的轉(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)只對單次請求生效
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)。