2016-01-10
刚开始android编程的时候, 关于ImageView.ScaleType网络上好多, 说实话没看懂. 本文就是为了讲清楚这个, 有用的话转走, 请注明原地址和作者.
典型的代码调用如下
<ImageView
android:layout_width="300dp"
android:layout_height="400dp"
android:scaleType="center"
android:src="@drawable/numbers" >
</ImageView>
为了看起来方便, 下面所有的例子中ImageView(我把它叫做容器)的大小固定在300x400dp, 只调整图片的大小.
图片使用0-8数字格, 添加了10px的蓝色边框. 这样如果图片经过了变形裁剪等, 都很容易看出来.
ScaleType主要有如下几种取值:
1. CENTER 把图片放在容器的中间, 但是不会调节图片尺寸, 原图多大就显示多大.
图片100x100 图片300x300 图片400x400
2. CENTER_CROP 等比例放大或者缩小图片, 目的是调整后图片的一条边正好等于容器的边, 另一条边要大于等于容器的边. 看起来就是一定要把图片拉伸出去.
不管图片是100x100, 还是900x900, 都是左边的效果, 都会把一条边(这里是水平边)调整成和容器一样大, 垂直边调整成超出容器.
3. CENTER_INSIDE 等比例放大或者缩小图片, 目的是调整后图片的两条边都要小于等于容器的边. 看起来就是一定要把图片压缩进去.
图片小 图片大
4. FIT_CENTER 等比例放大或者压缩图片, 目的是调整后图片的一条边正好等于容器的边, 另一条边要小于等于容器的边. 而且图片要放在容器中心.
不管100x100, 还是900x900, 图片都会把严丝合缝的放进去.
5. FIT_END 同FIT_CENTER, 只是图片放在容器的右下方
6. FIT_START 同FIT_CENTER, 只是图片放在容器的左上方
7. FIT_XY 不管大图小图, 简单粗暴的把X和Y拉成和容器一样大小.
总结一下,
1. 最常用的就是FIT_CENTER, FIT_START, FIT_END, 因为1.它保证了图片的长宽比, 显示出来的和原图协调; 2. 它至少使一条边贴近容器, 充分考虑了容器的大小.
2. 其次常用的是FIT_XY, 优点是确保容器被填满, 缺点是图片失真.
3. CENTER_CROP会导致图片被裁剪;CENTER_INSIDE不适用于小图, 会导致图片看起来很小, 容器很大, 不成比例, 完全可以用FIT_CENTER代替.
4. 最不常用的是CENTER, 完全不调整图片尺寸, 对容器大小的限制太死, 在android多分辨率的设备上无法使用.