ImagView 显示图片的原理初步分析

左上显示:以图片的左上顶点和ImagView的左上顶点为基准,将图片显示。
居中显示:以图片的几何中心点和ImagView的几何中心点为基准,将图片显示。
右下显示:以图片的右下顶点和ImagView的右下顶点为基准,将图片显示。

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无意义。

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原比例恰好完整地显示图片,须:
1、bitmap和ImageView尺寸一样;
2、bitmap大图,ImageView等比例;
...
注:小图,ImageView等比例无效的,因为wrap_content会发生作用

应用:
1、不规则图片显示(瀑布流)【ImageView服从图片尺寸】
根据限定宽/高(依赖设备)算出bitmap的宽高,再确定ImageView的宽高;
注:抹去了match_parent等参数和(抹平了)scaleType的作用和影响;
缺点:得到bitmap才能知道布局的宽高。
解决方案:将原图宽高与图片url一起作为第一次http请求的返回值。

你可能感兴趣的:(ScaleType,原比例恰好完整地显示图片,不规则图片显示)