[Android]ImageViewのscaleTypeを秒で決める


ImageViewのサイズがwrap_contentじゃない前提。

  • 絵、写真 → FIT_CENTER
  • 9パッチ画像 → FIT_XY
  • スプラッシュ → CENTER_CROP

以下補足。読むと秒では決まらない。

よく使うもの

画像は正方形のImageViewに横長の画像をセットした場合のイメージ。

FIT_CENTER

  • 縦横比保持
  • 切り取られず、画像全体が表示される
  • ImageViewにちょうど収まるよう拡大・縮小される
  • ImageViewの全体は画像で埋まらず、隙間ができる

画像の縦横比を維持したまま、画像全体がImageViewに収まる最大サイズで、Viewの中心に画像を表示する。
Viewと画像の間に、縦か横どちらか隙間が空く。

縦横比保持で画像全体が表示されるので、絵や写真を表示するには一番無難なパターン。
画像全体がImageViewに収まるように表示するので、場合によっては結構小さくなる。

CENTER_CROP

  • 縦横比保持
  • 画像の縦横どちらが切り取られる
  • ImageViewの全体を埋めるよう拡大・縮小される

画像の縦横比を維持したまま、縦横どちらかがImageViewに収まる最大サイズで、ImageViewの中心に画像を表示する。
画像はImageViewより大きなサイズになり、Viewに収まりきらない縦か横どちらかは、画像のViewにおさまらない部分がクロップ(切り取り)される。
起動スプラッシュなど、特定の範囲を隙間なく画像で埋めたい場合に使える。

FIT_XY

  • 縦横比は保持されない
  • 一部が切り取られず、画像全体が表示される
  • ImageViewの全体を埋めるよう拡大・縮小される

ImageViewのサイズに合わせて画像を拡大・縮小して表示する。
9パッチを適用した背景画像などに使用する。
縦横比が崩れるため、写真や絵には使えない。

あまり使わないもの

CENTER

ImageViewの中央に、拡大縮小なしで画像を表示。
拡大縮小したくなければこれだが、拡大縮小するケースの方が多いのでそんなに使わない。

CENTER_INSIDE

FIT_CENTERと似ているが、こちらは拡大されない。(縮小はされる)
拡大されないので、画像がImageViewより小さいと隙間が空く。
ほとんどの場合拡大されるFIT_CENTERの方が有用なので、あまり使わない。

FIT_START、FIT_END

縦横比保持で、左上か右下に寄せる。
たまに使うかもしれない程度。

MATRIX

Image Matrix を使って行列変換するときに指定。
画像を変形や回転させる場合に使えるが、理系でないとピンとこないかもしれない。

補足

scaleTypeについてはこちらが詳しい。
https://akira-watson.com/android/imageview_scaletype.html