2017-02-05 29 views
0

在我的android應用程序中,我使用Fresco實現了imageview,因爲圖像是GIF。和圖像是由服務器提供的node.js如何在下載之前設置imageView的大小

有類似Instagram的時間表,但圖像是GIF。問題在於,在下載照片之前,圖像視圖被設置爲默認尺寸,如200x200。然後在下載圖像之後,它變成實際大小。 我希望imageview的大小與實際大小相同,甚至在加載之前。我已經看到大多數商業應用程序,即使在加載之前,imageview的大小已經設置爲原始大小。

我想知道什麼是最好的方式來實現這一點。

我在想,當服務器發送客戶端的帖子的描述,如圖片的網址,標題,內容,喜歡的數量,它是否也應該發送尺寸?像

{elements:[{ 
      url:"http://blah.com/image.jpg", 
      title:"this is the title", 
      photo_width:300, 
      photo_height:500, 
      and other stuffs 
      }, 
      {another element}, 
      {so on}] 
} 

或者是壁畫有辦法解決這個,我不知道?

+1

您思維正確,維度應該從服務器發送。 –

+0

@PriyaSinghal謝謝你,所以我應該使用類似[this](https://github.com/image-size/image-size) –

回答

1

我不認爲Fresco覆蓋了這個用例。

任何主流的網絡瀏覽器(如Chrome)都可以在圖像實際加載之前獲得寬度和高度,因爲只要瀏覽器加載文件頭,它就會具有圖像的寬度和高度。

但是Fresco的ControllerListener似乎沒有beforeDownload(@Nullable ImageInfo imageInfo),所以你必須等待圖像被完全加載才能獲得實際大小。

即使你所說的lib'圖像大小'聲稱你不需要下載整個圖像來獲得大小,我不明白爲什麼Fresco不能做到這一點。也許我們應該向Fresco團隊提出建議。

編輯:
嗨,我發現這個真棒LIB搜索github上: https://github.com/qstumn/FastImageSize

它可以讓你獲得圖像的大小,而無需下載整個文件,並可以很容易地使用

int[] imageSize; 
//sync 
imageSize = FastImageSize.with(url).get(); 

//async 
FastImageSize.with(url).get(new FastImageSize.ImageSizeCallback() { 

     @Override 
     public void onSizeReady(int[] size) { 
      imageSize = size; 
     } 
}); 

int imageWidth = imageSize[0]; 
int imageHeight = imageSize[1]; 
+0

謝謝!我更新了服務器發送寬度和高度,但我會嘗試這一個,看看它是否更快 –

相關問題