左上显示:以图片的左上顶点和ImagView的左上顶点为基准,将图片显示。
居中显示:以图片的几何中心点和ImagView的几何中心点为基准,将图片显示。
右下显示:以图片的右下顶点和ImagView的右下顶点为基准,将图片显示。android
ImageView的默认状态scaleType="fitCenter"
1.ImageView[match_parent,match_parent]
scaleType="matrix" 左上显示原图(图片超出部分截掉,未超出部分上背景色)。
scaleType="fitXY" 把图片伸缩到填满ImageView ,不保持原比例。
scaleType="fitStart" 把图片按比例扩大(缩小)到等于或小于ImageView的宽度(长度),左上显示(图片未超出部分上背景色)。
scaleType="fitCenter" 把图片按比例扩大(缩小)到等于或小于ImageView的宽度(长度),居中显示(图片未超出部分上背景色)。
scaleType="fitEnd" 把图片按比例扩大(缩小)到等于或小于ImageView的宽度(长度),右下显示(图片未超出部分上背景色)。
scaleType="center" 居中显示原图(图片超出部分截掉,未超出部分上背景色)。
scaleType="centerCrop" 把图片按比例扩大(缩小)到等于或大于ImageView的宽度(长度),居中显示被处理过的图片(图片超出部分截掉)。
scaleType="centerInside" 把图片按比例扩大(缩小)到等于或小于ImageView的宽度(长度),居中显示被处理过的图片(图片未超出部分上背景色)。
注:此布局下,原图和ImageView尺寸一致的话,scaleType无心义。ide
2.ImageView[wrap_content,wrap_content]
小图的话都是恰好包裹图片,大图同ImageView[match_parent,match_parent]。
3.ImageView[match_parent,wrap_content]
小图的话是限定ImageView尺寸+参数,大图同ImageView[match_parent,match_parent]。
4.ImageView[wrap_content,match_parent]
小图的话是限定ImageView尺寸+参数,大图同ImageView[match_parent,match_parent]。布局
结论:match_parent等参数和scaleType的意义在于,图片尺寸服从ImageView。
所以,ImageView借助scaleType的问题:只要原图和ImageView尺寸不一致,那么就有可能存在图片部分被截掉或ImageView被上背景色。
那么,要ImageView原比例刚好完整地显示图片,须:
一、bitmap和ImageView尺寸同样;
二、bitmap大图,ImageView等比例;
...
注:小图,ImageView等比例无效的,由于wrap_content会发生做用url
应用:
一、不规则图片显示(瀑布流)【ImageView服从图片尺寸】
根据限定宽/高(依赖设备)算出bitmap的宽高,再肯定ImageView的宽高;
注:抹去了match_parent等参数和(抹平了)scaleType的做用和影响;
缺点:获得bitmap才能知道布局的宽高。
解决方案:将原图宽高与图片url一块儿做为第一次http请求的返回值。spa
最终最简解决方案:
android:adjustViewBounds="true" 调整ImageView的界限来保持图像纵横比不变。
android:scaleType="centerCrop"
说明:
1.android:adjustViewBounds="true"会将这个ImageView的scaleType设为fitCenter;
2.不过这个fitCenter会被后面定义的android:scaleType="centerCrop"属性覆盖。图片