美文网首页
mipmap与drawable的区别

mipmap与drawable的区别

作者: 不收敛的柯西 | 来源:发表于2020-04-20 13:46 被阅读0次

Android官方建议

查看Android官方文档发现,在多个地方建议开发者将app启动图标放在mipmap/文件夹下,位图等资源仍放在drawable/文件夹下(点击前往

官方建议

mipmap在图形学中的解释

为了加快渲染速度和减少图像锯齿,贴图被处理成由一系列被预先计算和优化过的图片组成的文件,这样的贴图被称为 mipmap。</br>
例如一张64x64的图片,会产生64x64,32x32,16x16,8x8,4x4,2x2,1x1的7张图片,当屏幕上需要绘制像素点为20x20 时,程序只是利用 32x32 和 16x16 这两张图片来计算出即将显示为 20x20 大小的一个图片,这比单独利用 64x64 的那张原始片计算出来的图片效果要好得多,速度也更快.

mipmap中资源显示逻辑

在官方博客Getting Your Apps Ready for Nexus 6 and Nexus 9中提到:Nexus 6的屏幕密度为560 dpi,处于xxhdpi和xxxhdpi之间。Android默认将会将xxxhdpi下的资源缩小,如果xxxhdpi下无可用资源,则将xxhdpi下的资源放大。若仍无可用资源则会一直往低密度文件夹找可用资源,然后放大到560dpi对应的大小。

  • 首先从与自己 dpi 匹配的文件夹下的图片。
  • 如果与自己 dpi 匹配的文件夹下面的图片不存在,它就从更高 dpi 的文件夹下面找。
  • 如果更高 dpi 的文件夹下面找不到,就从更低的 dpi 文件夹下面找。
  • 找到资源后会将资源缩放到设备分辨率大小

drawable中资源显示逻辑

仍以Nexus 6为例,屏幕密度处于xxhdpi和xxxhdpi之间。在drawable/中,Android默认匹配更高dpi的文件夹,即Nexus 6属于xxxhdpi。如果xxxhdpi下无可用资源,则将xxhdpi下的3倍资源放大到4倍。若仍无可用资源则会一直往低密度文件夹找可用资源,然后放大成4倍资源。

屏幕密度
  • 首先从与自己 dpi 匹配的文件夹下的图片。
  • 如果与自己 dpi 匹配的文件夹下面的图片不存在,它就从更高 dpi 的文件夹下面找。
  • 如果更高 dpi 的文件夹下面找不到,就从更低的 dpi 文件夹下面找。
  • 找到资源后会将缩放成设备匹配的倍数资源

总结

  1. mipmap会将资源缩放到设备分辨率大小,drawable会将资源缩放到设备匹配的倍数大小
  2. 官方推荐开发者将位图等资源放在对应dpi的drawable/下,而不是放在mipmap/下。这样各种dpi可直接找到对应资源,减少了mipmap/精确适配的需要缩放计算,也不会因为图片缩放导致显示问题
  3. 高密度的系统去使用低密度目录下的图片资源时,会将图片长宽自动放大以去适应高密度的精度,当然图片占用的内存会更大。

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

参考

分组资源类型(官方文档)
Getting Your Apps Ready for Nexus 6 and Nexus 9
支持不同密度(官方文档)

相关文章

网友评论

      本文标题:mipmap与drawable的区别

      本文链接:https://www.haomeiwen.com/subject/osytcftx.html