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