If you’re anything like me, you are really, really, ridiculously good looking.
But you’re also probably a tad forgetful. So when it comes time to scale an
image in an ImageView, you cannot for the life of you remember what all the
different ScaleTypes actually look like on the screen. So, you spend the next
10-15 minutes building and rebuilding your app with each and every scale type to
see what they all look like. Then you inevitably forget the difference between
two of them and start the whole process all over again. As the kids say, “I
gotchu fam”.
Below are screenshots of all the different ScaleTypes placed side-by-side. And
below that are all the ScaleType definitions copy and pasted directly from the
official Android docs. And even further below those is a helpful tip for those
brave souls who make it to the end of this post :)
The full descriptions of each ScaleType from the official Android
documentation.
Center the image in the view, but perform no scaling.
Scale the image uniformly (maintain the image’s aspect ratio) so that both
dimensions (width and height) of the image will be equal to or larger than the
corresponding dimension of the view (minus padding).
Scale the image uniformly (maintain the image’s aspect ratio) so that both
dimensions (width and height) of the image will be equal to or less than the
corresponding dimension of the view (minus padding).
Scale the image using Matrix.ScaleToFit.CENTER
Matrix.ScaleToFit.CENTER: Compute a scale that will maintain the original src
aspect ratio, but will also ensure that src fits entirely inside dst. At least
one axis (X or Y) will fit exactly. The result is centered inside dst.
Scale the image using Matrix.ScaleToFit.END
Matrix.ScaleToFit.END: Compute a scale that will maintain the original src
aspect ratio, but will also ensure that src fits entirely inside dst. At least
one axis (X or Y) will fit exactly. END aligns the result to the right and
bottom edges of dst.
Scale the image using Matrix.ScaleToFit.START
Matrix.ScaleToFit.START: Compute a scale that will maintain the original src
aspect ratio, but will also ensure that src fits entirely inside dst. At least
one axis (X or Y) will fit exactly. START aligns the result to the left and top
edges of dst.
Scale the image using Matrix.ScaleToFit.FILL
Matrix.ScaleToFit.FILL: Scale in X and Y independently, so that src matches
dst exactly. This may change the aspect ratio of the src.
Scale using the image matrix when drawing.
While not technically an ImageView.ScaleType this will come in handy. If you
notice with CENTER_INSIDE, FIT_CENTER, FIT_END and FIT_START the actual
bounds of the ImageView are much larger than the scaled image. To set the
bounds of the ImageView to the height of the image inside, use
android:adjustViewBounds="true” in your XML. It looks like this: