すぐ思い出すためのAndroid ImageViewのScaleType一覧 (画像つき)

# 前置き

- いつも、 `ImageView` の [`ScaleType`](https://developer.android.com/reference/android/widget/ImageView.ScaleType) がわからなくなってAPIリファレンスを見てしまう (しかも一部は [`Matrix.ScaleToFit`](https://developer.android.com/reference/android/graphics/Matrix.ScaleToFit#END) を見ないと分からない) ので、せめて素早く思い出せるように、画像つきで各 `ScaleType` の特徴を整理しました

# `ScaleType` 一覧

| `ScaleType` | 両辺とも画像のほうが大きい | 片辺だけ画像のほうが大きい | 両辺とも画像のほうが小さい |  説明 |
| --- | :-: | :-: | :-: | --- |
| (サイズ関係) | <img width="160" src="https://qiita-image-store.s3.amazonaws.com/0/80557/b439fa8f-950e-f855-3a5c-292eea9d1ecb.png" /> | <img width="160" src="https://qiita-image-store.s3.amazonaws.com/0/80557/8c100aa2-30a6-c1b8-353a-a72da0bd4017.png" /> | <img width="160" src="https://qiita-image-store.s3.amazonaws.com/0/80557/a5fb919e-7112-d4ad-f17b-9114dc1d9309.png" /> | |
| [`CENTER`](https://developer.android.com/reference/android/widget/ImageView.ScaleType#CENTER) | <img width="160" src="https://qiita-image-store.s3.amazonaws.com/0/80557/2f1024a5-49ed-1cf4-9053-a87ec271c9f5.png" /> | <img width="160" src="https://qiita-image-store.s3.amazonaws.com/0/80557/eaa25025-fefc-7cd7-333e-eb83f02e33aa.png" /> | <img width="160" src="https://qiita-image-store.s3.amazonaws.com/0/80557/9a508211-5c05-2203-5961-a9e8d1deef00.png" /> | 拡大も縮小もしない |
| [`FIT_CENTER`](https://developer.android.com/reference/android/widget/ImageView.ScaleType#FIT_CENTER) | <img width="160" src="https://qiita-image-store.s3.amazonaws.com/0/80557/b29083b7-5a1e-ba32-d440-43f847b2ae8b.png" /> | <img width="160" src="https://qiita-image-store.s3.amazonaws.com/0/80557/9c97ac4f-7cb5-b14e-e5b6-5f99ba649c5c.png" /> | <img width="160" src="https://qiita-image-store.s3.amazonaws.com/0/80557/1941fd93-ed58-de0c-0bd0-2ec97a3b79de.png" /> | 片辺が `ImageView` に一致。<br />もう片辺は `ImageView` 以下 |
| [`CENTER_CROP`](https://developer.android.com/reference/android/widget/ImageView.ScaleType#CENTER_CROP) | <img width="160" src="https://qiita-image-store.s3.amazonaws.com/0/80557/270dbbe0-8832-8bbc-5183-a39aa94967f4.png" /> | <img width="160" src="https://qiita-image-store.s3.amazonaws.com/0/80557/728cd9ad-49b6-44e7-b1f7-c868e798bb3c.png" /> | <img width="160" src="https://qiita-image-store.s3.amazonaws.com/0/80557/f9d00f4b-0413-caa3-c223-4412101bf41c.png" /> | 片辺が `ImageView` に一致。<br />もう片辺は `ImageView` 以上 |
| [`CENTER_INSIDE`](https://developer.android.com/reference/android/widget/ImageView.ScaleType#CENTER_INSIDE) | <img width="160" src="https://qiita-image-store.s3.amazonaws.com/0/80557/f7361e72-ddd0-fc8d-5a8c-e178418c321e.png" /> | <img width="160" src="https://qiita-image-store.s3.amazonaws.com/0/80557/d027d326-7eba-21e9-a878-00ea5f1eaf53.png" /> | <img width="160" src="https://qiita-image-store.s3.amazonaws.com/0/80557/647bfd3e-5e9a-59ae-84e7-a386ba89e8a7.png" /> | 画像が `ImageView` より大きい場合、<br />両辺が `ImageView` に収まるように縮小する。<br />画像が `ImageView` よりも小さい場合はそのまま |
| [`FIT_XY`](https://developer.android.com/reference/android/widget/ImageView.ScaleType#FIT_XY) | <img width="160" src="https://qiita-image-store.s3.amazonaws.com/0/80557/a38dfdfc-f410-9f11-9f19-89e1b102154e.png" /> | <img width="160" src="https://qiita-image-store.s3.amazonaws.com/0/80557/c9c322d7-0fe7-322d-ede3-90984b1ca205.png" /> | <img width="160" src="https://qiita-image-store.s3.amazonaws.com/0/80557/4c4ecbf5-2c27-c663-2547-bfa760d3177f.png" /> | 両辺とも `ImageView` 一致 |
| [`FIT_START`](https://developer.android.com/reference/android/widget/ImageView.ScaleType#FIT_START) | <img width="160" src="https://qiita-image-store.s3.amazonaws.com/0/80557/8c65a27f-6de8-0f91-47a6-977eff36f23c.png" /> | <img width="160" src="https://qiita-image-store.s3.amazonaws.com/0/80557/7a8f57c3-cc7a-3d2f-b047-2d85b28b31c0.png" /> | <img width="160" src="https://qiita-image-store.s3.amazonaws.com/0/80557/1fb14ec7-76ca-126f-5849-9dccc313df47.png" /> | `FIT_CENTER` の拡大・縮小をして左上につける |
| [`FIT_END`](https://developer.android.com/reference/android/widget/ImageView.ScaleType#FIT_END) | <img width="160" src="https://qiita-image-store.s3.amazonaws.com/0/80557/77b0b844-33ee-35a9-e284-1beefc0b0893.png" /> | <img width="160" src="https://qiita-image-store.s3.amazonaws.com/0/80557/c5af102b-390f-311b-68ce-6ab68788f839.png" /> | <img width="160" src="https://qiita-image-store.s3.amazonaws.com/0/80557/17716a3f-1ea2-915c-d3e1-6be064064fda.png" /> | `FIT_CENTER` の拡大・縮小をして右下につける |

※ [`MATRIX`](https://developer.android.com/reference/android/widget/ImageView.ScaleType#MATRIX) は変換行列を自分で設定する変幻自在の `ScaleType` なので、除外しています

# おまけ: 表示確認用アプリ

- サンプル表示を取得するために作ったアプリのソースコードを 
  [kafumi/android-imageview-scale-showcase](https://github.com/kafumi/android-imageview-scale-showcase) に格納してあります
- 3画像サイズ × 7 ScaleType = 21枚のスクリーンショットの取得は、[facebook/screenshot-tests-for-android](https://github.com/facebook/screenshot-tests-for-android) を使って、Instrumentation Testとして自動化しました ([ソースコード](https://github.com/kafumi/android-imageview-scale-showcase/blob/master/app/src/androidTest/java/io/github/kafumi/imageviewscaleshowcase/MainActivityTest.kt))
  - [facebook/screenshot-tests-for-android](https://github.com/facebook/screenshot-tests-for-android) は簡単に使えるライブラリで便利だったのですが、スクリーンショットが512 x 512ピクセルごとに別々の画像ファイルに分割されてしまうという挙動があり、少しはまりました
  - [`ScreenshotImpl` という内部クラスのメソッド](https://github.com/facebook/screenshot-tests-for-android/blob/0.8.0/core/src/main/java/com/facebook/testing/screenshot/internal/ScreenshotImpl.java#L109-L113)を使って分割サイズを変更することで回避可能でした