0

私の質問はタイトルだけです。レイアウトに画像を配置しようとしましたが、これを FrameLayout の背景で wrap_content の幅と高さで試し、また imageView で可能なすべての fitScale プロパティを試しました。

720 px 幅の画像が、720 px 幅の samsung galaxy s3 である私の携帯電話の画面の幅で半分になっている理由がわかりません....

私の本当の質問:

アプリケーション内の写真がゆがまないようにする最善の方法は何ですか?

4

1 に答える 1

3

まず、ピクセルではなく、画面の密度とディップ値を考慮する必要があります。つまり、デバイスに応じて、1 ディップ (密度に依存しないピクセル) が異なる量の実際のスクリーン ピクセルを表す「仮想スクリーン」を扱っていることを意味します。

ドローアブルの場合、どの画面でも鮮明な結果を得るために、次のカテゴリがあります。

  • ldpi (倍率 0.75)
  • mdpi (デフォルト / ベースライン: 倍率 1.0)
  • hdpi (1.5)
  • xhdpi (2.0)

これらの倍率に基づいてビットマップのさまざまなサイズのバージョンを作成し、どの画面でも鮮明な結果を得ることができます。アップスケーリングによる品質の低下を避けるために、最高解像度として xhdpi から開始する必要があります。

これらの異なるバージョンをそれぞれのドローアブル フォルダー (res/drawable-ldpi、res/drawable-mdpi...) に入れます。1 つの同じビットマップのこれらの異なるバージョンは、もちろん同じファイル名を持たなければなりません。

第二に、デバイスの画面の高さと幅について強い思い込みをするべきではありません。ビューとグラフィックをレイアウトして、正確な画面解像度を知らなくても画面全体を動的に利用できるようにする必要があります。ただし、構成修飾子に基づいて、これらの画面解像度について弱い仮定を立てることができます。

  • 小さな
  • 正常
  • 大きい
  • ×ラージ

仮定に基づいて、ビューの固定サイズを避けるようにしてください。レイアウト XML ファイルでは常に「px」値を避けてください。代わりに「ディップ」を使用してください。

詳細については、ドキュメントの複数画面のサポートを参照してください。

達成したいことは、画像が画面の全幅を占めるようにしたいように聞こえます。

画像を任意のビュー (FrameLayout など) の背景として設定すると、表示される画像のクリップはそのビューのサイズによって異なります。

そのビューの layout_width / layout_height が wrap_content に設定されている場合、そのサイズは子ビューの寸法と配置によって異なります。FrameLayout の場合、FrameLayout の単一の子のサイズに依存します。

ImageView を使用している場合、画像はデフォルトで ImageView のサイズに合わせてスケーリングされます。ImageView のサイズは、layout_width / layout_height の値によって異なります。これらの値を match_parent に設定し、ImageView に「拡大する」十分な余地がある場合は、画像が画面全体に広がるのを確認できるはずです。

「成長の余地」は、レイアウト内の ImageView のコンテキストによって異なります。部屋を占有する隣人はいますか?親ビューが小さすぎませんか (たとえば、wrap_content のため)? これらの考えられる問題を探します。

于 2012-07-13T16:38:22.420 に答える