私のアプリケーションでは、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:あなたのアプローチはここにあります。
私はおそらく中間を探しているか、まったく違うことをやったことがあれば、それについても聞いています。
高解像度の画像サーバー側のみを保存し、サーバー側のロジックを使用して、画面サイズのパラメータに基づいて、サイズを変更して目的の解像度を提供してみませんか? –
私が検討していない選択肢は間違いありません。今、サーバーは画像のURLを送り返します。それは、ダウンロード/キャッシュ/表示するためにライブラリに渡すのがいいです。このアプローチでは、代わりにサービスコールで実際のイメージを提供することを提案していますか?私はアプリの意思決定コードの容易さのためにこのアイデアが好きですが、代わりに自分でキャッシュしてダウンロードする必要がある場合、それが価値があるかどうかはわかりません。 – acommoner
LRUCacheを使ったキャッシングとダウンロードは、それほど困難ではありませんが、より永続的なキャッシュはもう少し複雑になります –