hiccLoghicc log by wccHipo日志

浅谈Android图片资源文件的尺寸处理

toc

Intro

为了应付众多的屏幕,Android将屏幕分为四个等级(也就是四个屏幕密度screenDensity

[![Android屏幕密度screenDensity](https://image.hicc.pro/wp-content/uploads/2013/08/Android-screenDensity-1024x238.jpg)](https://image.hicc.pro/wp-content/uploads/2013/08/Android-screenDensity.jpg)Android屏幕密度screenDensity
而相应的在Android项目的工程中会有对应的图片资源文件夹(drawable-ldpi、drawable-mdpi、drawable-hdpi、drawable-xdpi), Android程序在呈现图片时会**优先选择符合屏幕等级文件夹下的资源。**

但是如果资源只在一个文件夹下,Android在不同屏幕下会对该图片做怎样的呈现?

工作中遇到的一个问题是,360p宽的一张资源图片,在720px宽、屏幕密度为xhdpi的屏幕上却呈现为480px的宽度(经过截图量取),经过排查方向该图片只是放在了drawable-hdpi的文件夹下,Android只是死板地按照hdpi的等级来呈现图片

至于尺寸变化的合理的解释应该是:

  • Android程序在呈现图片时会优先选择符合屏幕等级文件夹下的资源。
  • Android呈现UI都是换算成dp单位来呈现。
  • 如果只在一个文件夹下有资源,Android在其他屏幕等级下,仍按照改文件夹等级的px到dp的换算规则换算成dp长度来呈现图片。

因此刚才例子中480=360 * 160/240  * (320 /160)

上述等式涉及Android中px和dp的转换,请读者自行脑补ಠ౪ಠ

因此Android开发中若有尺寸敏感的图片资源,一定要记得铺盖到全部文件夹,哪怕同样的文件,在不同文件夹下最后的渲染呈现也会不同。