Android drawable与mipmap的区别(android资源文件放置位置)

1.Drawable

Android 把可绘制的对象抽象为Drawable,不同的图形图像代表着不同的darwable类型,

通常我们在代码中不会直接接触drawable实现类的,是由android FrameWork提供了一些

具体的drawable的实现。

我们在实际开发中,会把drawable的资源放在res/drawable目录上,当需要使用图片资源时

可以通过@drawable或者id引入这些drawable资源

drawable是默认共享的,不同的地方使用了相同资源drawable,他们会指向相同的资源,相同

的状态,如果drawable被修改了,其他都被修改了,

 


2.mipmap

在使用android Studio 创建项目的时候,常常会看到系统吧ic_launcher.png图片放在mipmap-xxhdpi

目录下,mip来源于拉丁文中的mulium in parvo 意为在一个小空间的多数,MIP map是一种电脑图形图像技术,用于在三维图像的二维代替物中达到立体感效果

mipmap目录的图标会忽略屏幕密度,回去匹配大一点的,然后系统自动对图片进行缩放,从而优化显示和节省资源。官方建议如下类型的图片资源放在mipmap目录:

launcher icons

action bar and tab icons

Notification icons

 


3.针对于drawable 与 mipmap都有了一定的认识,那么我们在实际开发中,到底把图片资源放在drawable下还是mipmap下?

答案:mipmap文件夹方应用图标,其实需要使用drawable资源像之前一样对应的放到drawable文件夹,

根据这篇google的博文:

It’s best practice to place your app icons in mipmap- folders (not the drawable- folders) because they are used at resolutions different from the device’s current density.

应用的启动图标最好放到mipmap文件夹(不是drawable文件夹),因为它们用在不同分辨率的设备上。

When referencing the mipmap- folders ensure you are using the following reference:

当引用mipmap文件夹的资源时,需要使用下面的方式:

android:icon="@mipmap/ic_launcher"

结论:

mipmap仅仅用于应用启动图标,可以根据不同分辨率进行优化。其他的图标资源,还是要放到drawable文件夹中。

 


Android 官方解释[3]:

Note: You should place all launcher icons in the res/mipmap-[density]/ folders, rather than drawable/ folders to ensure launcher apps use the best resolution icon.

注意:你应当将虽有启动图标放到res/mipmap-[density]/文件夹中,而不是drawable/文件夹,来确保启动图片使用最好的分辨率图标。

 


在网上查阅两道面试题,希望能加深一下大家的印象:

Android资源目录的读取顺序?

Android资源文件可以定义在不同分辨率、屏幕方向、语言等(甚至还有夜间模式),当我们的应用需要使用一个资源,这个资源(图片、Layout或者别的)可能在很多res下的子目录中都存在,那么Android系统是如何确认使用哪一个资源呢?

这就是一个Android应用的资源查找的顺序问题,其实简单说,在查找时会先去掉有冲突的资源目录(上图第1步),然后再按MCC、MNC、语言等指定的优先级进行查找,直到确认一个匹配资源。根据屏幕尺寸限定符选择资源时,如果没有更好的匹配资源,则系统将使用专为小于当前屏幕的屏幕而设计的资源。

图片放错目录会产生的问题吗?

这一点可能很多人都不会注意,觉得只要往一个drawable目录中放了需要的资源就好了。而我们可以自己做一个简单的测试,把同一个图片资源放在不同的dpi目录,会发现它们使用的内存是不一样的。简单说就是高密度(density)的系统去使用低密度目录下的图片资源时,会将图片长宽自动放大以去适应高密度的精度,当然图片占用的内存会更大。

所以如果能提各种dpi的对应资源那是最好,可以达到较好内存使用效果。如果提供的图片资源有限,那么图片资源应该尽量放在高密度文件夹下,这样可以节省图片的内存开支。

posted on 2022-07-12 17:46  Bytezero!  阅读(1605)  评论(0编辑  收藏  举报