2017-02-05 12 views
0

私のアンドロイドアプリでは、イメージがGIFであったため、Frescoを使用してイメージビューを実装しました。画像はnode.jsで作られたサーバーから与えられましたダウンロードする前にimageViewのサイズを設定するには

画像はGIFです。問題は、写真をダウンロードする前に、イメージビューが200x200のようなデフォルトサイズに設定されていることです。イメージがダウンロードされた後、実際のサイズになります。 イメージビューがロードされる前であっても、イメージビューを実際のサイズのサイズにします。私は商用アプリケーションの大部分を見てきました。画像ビューのサイズは、ロードされる前から既に元のサイズに設定されています。

これを実装する最良の方法は何か知りたい。

私は、サーバーが画像のURL、タイトル、コンテンツ、好きな数のような投稿の説明をクライアントに送信しているときにも次元を送信する必要があると考えていましたか?

{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

あなたを使用するのは簡単です https://github.com/qstumn/FastImageSize

を正しいと思っている、dimenはサーバーから送られるべきです。 –

+0

@PriyaSinghalありがとうございます!ですので、[this](https://github.com/image-size/image-size)のようなものを使用してください。 –

答えて

1

私はフレスコがこのユースケースをカバーしたとは思わない。

ブラウザがファイルヘッダを読み込むとすぐに画像の幅と高さが決まるので、Chromeなどの主要なウェブブラウザは画像が実際に読み込まれる前に幅と高さを取得できます。

しかし、FrescoのControllerListenerはbeforeDownload(@ Nullable ImageInfo imageInfo)を持っていないようですので、実際のサイズを取得するにはイメージが完全に読み込まれるまで待つ必要があります。

サイズを取得するために画像全体をダウンロードする必要がないと主張したlibの 'image-size'でも、私はFrescoがそれをできない理由は見当たりません。多分私たちはフレスコのチームに提案するべきでしょう。

編集:
ねえ、私はこの素晴らしいlibの検索githubのが見つかりました:それはあなたがファイル全体をダウンロードせずに画像サイズを取得することができます、そしてそれは

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

ありがとうございました!私は幅と高さを送信するようにサーバーを更新しましたが、私はこれを試し、より速く –

関連する問題