異なる DPI の画像を使用することは、Android ではかなり一般的な方法です。しかし、その目的がよくわかりません。超巨大な画像を使用して、プログラムでスケーリングできないのはなぜですか? 異なる DPI で画像を作成しない場合、おそらく追加の計算が必要になることは承知していますが、それ以外に何か理由はありますか?
3 に答える
ティムとアドはあなたに正しい理由を持っています。正しいサイズで再スケーリングまたは描画されたものを比較したい場合の視覚的な例を次に示します。非常に小さなディテールがある場合、効果は常により顕著になります。
1 つ目は 200x200 の大きなサイズ (xhdpi と呼びます) で、2 つ目は単に同じ画像を mdpi (75x75) 用にリサンプリングしたものです。3 つ目は同じ仕様に再設計されていますが、75x75 から始まります。ご覧のとおり、2 番目のテキストは大幅にぼやけており、再スケーリングされたシェイプのエッジに沿っていくつかのアーティファクトがあります。
画面の密度に合わせて最適化された画像が得られます。すべてを xhdpi に任せると、処理中にいくつかの重要なピクセルが失われる可能性があることに注意する必要があります。
速度と精度を気にせず、重要なピクセルが欠けていることに人々が気付かないと思われる場合は、このアプローチを使用してもかまいません。
それだけでなく、画像を自分でスケーリングする場合 (たとえば、重みを使用) は、それらを dpi フォルダーに入れる必要はまったくありません - drawable-nodpi フォルダーに入れることができます。
画面密度の主要なクラスごとに適切なサイズに既にレンダリングされている画像を提供することで、コード内で明示的にスケーリングを行う必要がなくなり、「よりクリーンな」コードになります。
また、表示されているすべての画像をスケーリングする必要があることに起因するパフォーマンスの低下を回避します。これは、アプリが実行する必要がある正確なスケーリングに応じて、これらの操作を「その場で」実行しないことでパフォーマンスが大幅に向上する可能性がありますビューがユーザーに表示されているためです。
最後に、各サイズに適切にレンダリングされた画像を提供することで、リソースの見栄えが良くなります。システムのスケーリングは完全ではなく、画像をスケーリングする必要がある場合、画像の「鮮明さ」が損なわれます。それらを大幅にスケーリングする必要がある場合、これはユーザーに気付かれます。