Android ImageView.ScaleType有图有真相

本来没打算写这篇关于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的中间,图像大的话就截取图像中间的部分
    • centerCrop:按比例拉伸和缩放,保证图像的宽和高分别都<=ImageView的宽和高,然后把调整后的图像放在ImageView中间,这种情况下ImageView可能会有没被图像覆盖的部分
    • centerInside:按比例拉伸和缩放,保证图像的宽和高分别都>=ImageView的宽和高,然后把调整后的图像放在ImageView中间,此时整个ImageView都是覆盖着图像的
  • 类型总结
    ScaleType一共有8种类型,怎么才能记住这几种类型的特征呢,这里我们应用分类的思想,从这几种方式中选取有共同之处的放在一类中,所以我把他们分成三类:
    • fit合身类:fit*这种都属于这一类,这一类的特点是会保证在ImageView的显示范围之外不会有图像绘制,即图像全部在ImageView内显示,不论他是否比例变化,放在ImageView的什么位置
    • center居中类:center*这种的类型,这一类的特点是会保证图像都在ImageView的中间,当然也可以是整个ImageView
    • matrix:这个比较特殊,也最常用,所以下一篇博客就专门讲解一下matrix
  • 上图了
    技术分享
    原图片比ImageView的尺寸大的截图

    技术分享
    原图片比ImageView的尺寸小的截图


原谅我太懒~~~,截图来自于http://blog.csdn.net/xilibi2003/article/details/6628668


看完了这些是不是对ScaleType有了清晰的认识了呢,希望大家能在以后的项目中正确选择自己需要的类型,当然很多情况下直接用.9.png更方便一些

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。