本来没打算写这篇关于ScaleType的文章的,毕竟网上一大把,但是考虑到接下来的PhotoView源码的解析会用到这方面的知识,又不想让读者们再去费力去找别的相关文章,而且有的文章的讲解都是错的,所以就在这里讲解一下ImageView.ScaleType的几种不同类型究竟有什么区别,我们在实际使用的时候究竟应该采用哪一种
使用方法
- xml中:android:scaleType=”类型”
java代码中:imageview.setScaleType(类型)
注意这个属性只有和ImageView搭配才有作用
- 类型作用
- matrix:用矩阵绘图,从原图像的原点开始,尽量去充满ImageView控件的大小,实在充满不了又没有对matrix设置scale就会在ImageView上显示一段没有图像的区域
- fitXY:暴力拉伸或缩放,即不考虑图片的比例失调,每个方向独立地拉伸或者缩放到ImageView的大小,这种情况下图片很有可能会比例失调,ImageView全部被图像充满,这也是这几种类型中唯一会不按比例调整图片大小的类型,所以一般不用
- fitStart:按比例拉伸或缩放,可以考虑变换的渐进过程,即按比例放大或缩小图像,直至整个图像都在ImageView的显示区域内,然后把调整后的图像从ImageView的左上角开始放,即图像的上边缘和ImageView的上边缘对齐(除去padding)
- fitCenter:同fitStart,只不过把调整后的图像放在ImageView的中间
- fitEnd:同fitStart,把调整后的图像放在ImageView靠下的地方,使得图像的下边缘和ImageView的下边缘对齐(当然也要除去padding)
- center:保持原图像大小,不对图像拉伸和缩放,直接把图像放在ImageView的中间,图像大的话就截取图像中间的部分
- centerInside:按比例拉伸和缩放,保证图像的宽和高分别都<=ImageView的宽和高,然后把调整后的图像放在ImageView中间,这种情况下ImageView可能会有没被图像覆盖的部分
- centerCrop:按比例拉伸和缩放,保证图像的宽和高分别都>=ImageView的宽和高,然后把调整后的图像放在ImageView中间,此时整个ImageView都是覆盖着图像的
- 类型总结
ScaleType一共有8种类型,怎么才能记住这几种类型的特征呢,这里我们应用分类的思想,从这几种方式中选取有共同之处的放在一类中,所以我把他们分成三类:
- fit合身类:fit*这种都属于这一类,这一类的特点是会保证在ImageView的显示范围之外不会有图像绘制,即图像全部在ImageView内显示,不论他是否比例变化,放在ImageView的什么位置
- center居中类:center*这种的类型,这一类的特点是会保证图像都在ImageView的中间,当然也可以是整个ImageView
- matrix:这个比较特殊,也最常用,这篇文章讲的不错,大家可以看看:http://blog.csdn.net/pathuang68/article/details/6991867
上图了
原图片比ImageView的尺寸大的截图
原图片比ImageView的尺寸小的截图
原谅我太懒~~~,截图来自于http://blog.csdn.net/xilibi2003/article/details/6628668
看完了这些是不是对ScaleType有了清晰的认识了呢,希望大家能在以后的项目中正确选择自己需要的类型,当然很多情况下直接用.9.png更方便一些