本教程內(nèi)容來(lái)源于:http://fresco-cn.org
采用 知識(shí)共享 署名 4.0 國(guó)際 許可協(xié)議 進(jìn)行許可
使用這個(gè)功能需要直接創(chuàng)建 image request。
一般地,當(dāng)所要顯示的圖片和顯示區(qū)域大小不一致時(shí),會(huì)按以下方式進(jìn)行處理。
對(duì)于一個(gè)圖片,如果服務(wù)器支持不同尺寸的縮略圖,那么每次下載都選擇尺寸最匹配的圖片,這個(gè)不僅節(jié)省數(shù)據(jù)流量也節(jié)約本地儲(chǔ)存和CPU。
如果服務(wù)器不支持,或者處理本地圖片的話(huà),第二個(gè)選擇是使用縮放類(lèi)型??s放是用Androi內(nèi)置的功能使圖像和顯示邊界相符。在4.0之后,支持硬件加速。這在大部分情況下是最快,同時(shí)也是最高效的顯示一張和顯示邊界大小相符的圖片的方式。首先指定layout_width
和layout_width
為指定值,然后指定縮放類(lèi)型
但當(dāng)所要顯示的圖片比顯示區(qū)域大許多的時(shí)候,不推薦這樣做,縮放過(guò)程會(huì)導(dǎo)致大量的內(nèi)存消耗。
這時(shí),需要改變圖片尺寸。
調(diào)整大小并不是修改原來(lái)的文件,而是在解碼之前,在native內(nèi)存中修改。
這個(gè)縮放方法,比Android內(nèi)置的縮放范圍更大。Android相機(jī)生成的照片一般尺寸都很大,需要調(diào)整大小之后才能被顯示。
目前,僅僅支持JPEG格式的圖片,同時(shí),大部分的Android系統(tǒng)相機(jī)圖片都是JPEG的。
如果要修改圖片尺寸,創(chuàng)建ImageRequest
時(shí),提供一個(gè) ResizeOptions:
Uri uri = "file:///mnt/sdcard/MyApp/myfile.jpg";
int width = 50, height = 50;
ImageRequest request = ImageRequestBuilder.newBuilderWithSource(uri)
.setResizeOptions(new ResizeOptions(width, height))
.build();
PipelineDraweeController controller = Fresco.newDraweeControllerBuilder()
.setOldController(mDraweeView.getController())
.setImageRequest(request)
.build();
mSimpleDraweeView.setController(controller);
如果看到的圖片是側(cè)著的,用戶(hù)是難受的。許多設(shè)備會(huì)在JPEG文件的metadata中記錄下照片的方向。如果你想圖片呈現(xiàn)的方向和設(shè)備屏幕的方向一致,你可以簡(jiǎn)單地這樣做到:
ImageRequest request = ImageRequestBuilder.newBuilderWithSource(uri)
.setAutoRotateEnabled(true)
.build();
// as above