2016-11-11 4 views
0

私のアプリケーションでは、16:9のデバイス幅(ポートレート)の完全なバナーイメージを表示したいと考えています。私は自分が所有するバックエンドサービスによって提供されるURLから画像をダウンロード/表示するためにPicassoを使用しています。サービスからAndroidに可変イメージサイズをロードする

私の質問は:人々がこのタイプのことをするために使用している戦略は何ですか?

注:私はアイデアを捜し求めており、多くの具体的な助けが見つかりませんでした。

アプローチAを::心に来る

いくつかのアプローチサービスは、高解像度の画像を、販売しており、ピカソとサイズを変更します。 利点:写真を撮るためのロジックは単純ではありません。 小切手:小さいデバイスでは、画像をダウンロードできない解像度で画像をダウンロードするには、帯域幅が&になります。

アプローチB: のようなので、サービス上の画像の5の異なるバージョン(MDPI、hdpi、xhdpi、xxhdpi、& xxxhdpi)を持っていると私はから呼んでいるデバイスに応じて、これらのそれぞれをつかみます:

File ext   Dimensions 
------------------------------ 
_mdpi.jpg   360x203 
_hdpi.jpg   540x304 
_xhdpi.jpg   720x405 
_xxhdpi.jpg   1080x608 
_xxxhdpi.jpg  1440x810 

これは電話機には問題なく動作しますが、タブレットをミックスに投げ込むともう少し乱雑になります。さらにこれを受けて、Androidのように最小幅の修飾子を使用して、サービスからさらに多くのイメージを販売することができました。だから、

File ext   Dimensions 
------------------------------ 
_mdpi.jpg   360x203 
_hdpi.jpg   540x304 
_xhdpi.jpg   720x405 
_xxhdpi.jpg   1080x608 
_xxxhdpi.jpg  1440x810 
_sw600-mdpi.jpg  600x338 
_sw600-hdpi.jpg  800x450 
_sw600-xhdpi.jpg 1200x675 
... 
_sw720-mdpi.jpg  720x405 
_sw720-hdpi.jpg  1080x608 
_sw720-xhdpi.jpg 1440x810 
... 

...の線に沿って何かしかし、これは1440x810イメージがする必要があるだろう「sw720-xhdpi」として900dpの幅を(持っていても大きなデバイス(例えばピクセルC)を処理しません。 1800x1013に拡大)。

長所:表示するデバイスごとに適切なサイズに非常に近いサイズでダウンロードしています。 短所:は、1枚の画像ごとにあまりにも複雑すぎるようです。私は今、それの多くの異なるコピーを追加し、私はどのタイプの装置を把握し、サービスから適切なイメージを得ることができるデバイスコードを持つ必要があります。

アプローチC:あなたのアプローチはここにあります。

私はおそらく中間を探しているか、まったく違うことをやったことがあれば、それについても聞いています。

+1

高解像度の画像サーバー側のみを保存し、サーバー側のロジックを使用して、画面サイズのパラメータに基づいて、サイズを変更して目的の解像度を提供してみませんか? –

+0

私が検討していない選択肢は間違いありません。今、サーバーは画像のURLを送り返します。それは、ダウンロード/キャッシュ/表示するためにライブラリに渡すのがいいです。このアプローチでは、代わりにサービスコールで実際のイメージを提供することを提案していますか?私はアプリの意思決定コードの容易さのためにこのアイデアが好きですが、代わりに自分でキャッシュしてダウンロードする必要がある場合、それが価値があるかどうかはわかりません。 – acommoner

+0

LRUCacheを使ったキャッシングとダウンロードは、それほど困難ではありませんが、より永続的なキャッシュはもう少し複雑になります –

答えて

0

将来誰にも役立つ場合は、3つの異なるバケットサイズを使用して画像を提供するオプションBのフォームを作成しました。バケットは、次のように画面幅に基づいています。S:0-599px、M:600-1199px、L:1200 + px。

必ずしも最もエレガントではありませんが、これまでのところかなり良好に動作しています。

関連する問題