一开始想到这个问题,是因为工程文件里面可以看见各种mipmap/drawable开头文件夹,它们以hdpi、mdpi、xhdpi等等结尾。对他们的大致印象就是mipmip文件夹是存放icon的,drawable是存放图片或者xml文件的,然后他们的后缀大概就是跟分辨率有关,仅此而已,就准备了解一下具体的细节。
言归正传,之所以分成了这么多的文件夹,是android建议我们对每一种分辨率都配置相应尺寸的图片,然后系统会自动的去寻找最适合本机使用的尺寸。至于为什么要找到最合适的,放在后面引出一个tip-a的时候说。下面这张是mimmap的尺寸对应像素表。
插入几条人尽皆知,像素即px,一个画面是由很多像素点构成的,1024*768就是横向有1024个单位色块(像素点),纵向有768个像素点。像素点的物理大小是可以不同的,所以不要问为什么他屏幕小,像素比你高了,主要有钱。
顺便说说屏幕尺寸(inch),那谁谁十寸大屏,咋算的呢,其实就是对角线的长度,1寸=2.54厘米 2.539999918 。(这里寸是指英寸,咱家的三寸10厘米)。
然后是dpi(屏幕密度)= 每英寸的像素点数。别看懵了,是有点难要用毕达哥拉斯定理。
接着说经常在布局文件写的dp(也叫dip,device independent pixels):简单说就是android规定的一个的单位,换算公式就是:1 dp = (dpi/160) px(dpi越高,一个dp占的px就越多),网上有一些算式是写倒的,给俺整懵了。。。
然后再贴一张dpi范围对应的图
tip-a说:tip-a来了,前面说到,android会自动去寻找最合适自己图片,那得问一下找不着咋办,问得好啊。打个比方,假如xxhdpi里的图片是80分,android觉得自己值80分,那他有自知自明,他就来xxhdpi里找,结果发现里面没货了,那他就想一不做二不休整个100分的(xxxhdpi),找到的话,那自然就停止了,找不到,android就只能退而求其次去看看60分的(xhdpi),40分的(hdpi)…能不能找着。
android对寻找到的图片如果不是一开始匹配的自己(例如80分找到80分),则会进行一些操作。如果是在小于自己密度文件夹中找到的,它会对其进行一个放大的操作,即自己是80分却在60分的xhdpi或者40分的hdpi中找到图片,就会自动将这个图片放大,而放大的倍数也是有规则的,例如机器本身在xxhdpi的水平(该范围最高的dpi是480dpi),而找到的图片在hdpi(该范围最高的dpi是240dpi),则是一个两倍的关系,这张图片将会被放大两倍。(这张图片原先所占的px*2)
相对的,如果在比自己高的密度文件夹中找到了需要的图片,则会对其进行相对应的缩小。规则参照上面的。
所以要是你能让你的美工给你全套匹配密度的drawable当然最好,要是只有一种,那就尽量放在drawable-xxhdpi中,,毕竟放在小密度的文件夹中,在运行的时候被放大是要多占内存的。
感谢郭神的文章
https://blog.csdn.net/guolin_blog/article/details/50727753