1 图片存放文件夹问题
同一张图片放在不同dpi的文件夹显示效果不同,android系统加载图片资源遵循下面的规则:首先判断手机的屏幕密度,然后在相应的密度下文件夹中查找图片资源。如果找到,则进行显示。如果找不到,则会从drawable或者其他drawable-*文件夹中寻找。找到后,将文件夹所表示的密度与手机实际密度进行比较,从而缩放图片。比如我的机器屏幕密度480dpi,用到了一张640x200的图片,这张图放在xxhdpi(480dpi)目录下得到的view高度刚好是200px,放在xhdpi(320dpi) 下得到的高度则是300px,显然是系统对图片先进行了放大。换了个320dpi的机器,放在xhdpi则刚好是200px,放到xxhdpi高度则是133px,这时候则对图片进行了缩小。
2 ScaleType问题
ScaleType的设置会影响图片的显示效果,但这个和图片本身没关系,其实改变的canvas的显示matrix,ImageView的内部实现使用了一个叫mDrawMatrix的来处理变化。
CENTER_CROP 是我最常用到的,因为它看起来更和谐,而且图片等比缩放,不会变形。我的理解是这个属性会尽量照顾drawable和view的尺寸,如果view与drawble的高度比大于宽度比,则按高度比来进行缩放,否则按照宽度比来进行缩放。这种情况下看到的效果,view中不可能有留白,但是宽高有可能会被截取。
CENTER_INSIDE 如果drawble宽高都小于view,放进去就行了,不用缩放也不用位移。如果宽高有一点不和谐,则按照view和drawble宽高比中最小的来进行缩放。
CENTER 不缩放,放中间就行了。