从Android 4.3(Jelly Bean)开始,我们现在可以使用 res/mipmap
文件夹来存储"mipmap"图像 .
例如,Chrome for Android将其图标存储在这些文件夹中,而不是更常规的 res/drawable
文件夹中 .
How are these mipmap images different from the other familiar drawable images?
我看到在我的清单中,我们使用 @mipmap/
限定符,而不是 @drawable/
,这对于资源文件夹名称是有意义的:
<activity
android:name=".MipmapDemp"
android:icon="@mipmap/ic_launcher" />
参考文献:
Android 4.3 APIs文件有如下说法:
使用mipmap作为位图或drawable的源是提供高质量图像和各种图像比例的简单方法,如果您希望在动画期间缩放图像,这将特别有用 . Android 4.2(API级别17)在Bitmap类中添加了对mipmap的支持 - 当您提供了mipmap源并启用了setHasMipMap()时,Android会在您的Bitmap中交换mip图像 . 现在在Android 4.3中,您还可以通过提供mipmap资源并在位图资源文件中设置android:mipMap属性或通过调用hasMipMap()来为BitmapDrawable对象启用mipmaps .
我没有看到任何有助于我理解的东西 .
XML Bitmap resources拥有 android:mipMap
属性:
布尔值 . 启用或禁用mipmap提示 . 有关更多信息,请参见setHasMipMap() . 默认值为false .
就我所见,这不适用于启动器图标 .
问题出现在Google网上论坛(The purpose of resource name "mipmap"?!)上,Romain Guy回复道:
提供通常可以计算的更大分辨率的图像是有用的(例如,在mdpi设备上,Launcher可能希望更大的hdpi图标显示大型应用程序快捷方式 . )
我觉得这几乎是有道理的,但并不完全 .
我仍然倾向于选择Randy Sugianto的跟进:
这有什么好处?是否有任何指南如何使用mipmap,可能是为了更好的启动器图标?
当然,Wikipedia has a page for "Mipmap",指的是1983年发明的一种较老的技术,我无法与当前的Android实现相关联 .
我们现在应该存储所有 app icons in res/mipmap folders ,以及这些mipmap图像的 guidelines 是什么?
Update #1
这是一篇博文,试图解释一下 .
但是该博客文章中使用的图像显示了一个包含许多徽标的文件 . 这不是我在Chrome的mipmap文件夹中看到的内容 .
Chrome的 mipmap-hdpi
文件夹包含三张图片 . 一个是Chrome徽标,单独使用 .
奇怪的是,它是72x72,而不是48x48,我希望看到 .
也许这就是全部 - 我们只需要在mipmap文件夹中保留更大的图标?
Update #2
2014年10月23日的Android开发者博客文章再次确认了将 mipmap
文件夹用于应用程序图标的想法:
在谈到Nexus 6屏幕密度时,作者写道:
最佳做法是将应用程序图标放在mipmap文件夹(而不是可绘制文件夹)中,因为它们的分辨率与设备的当前密度不同 . 例如,可以在启动器上为xxhdpi设备使用xxxhdpi应用程序图标 .
Update #3
请注意,Android Studio会在 mipmap...
文件夹中创建 ic_launcher.png
图标,而不是Eclipse用于创建它们的 drawable...
文件夹 .
11 回答
来自this文章的引文 .
当为不同的密度构建单独的apks时,其他密度的可绘制文件夹被剥离 . 这将使图标在使用更高密度的启动器图标的设备中显得模糊 . 由于mipmap文件夹不会被剥离,因此最好使用它们来包含启动器图标 .
由于我正在寻找一个明确的答案,以确定通知图标的正确类型,我'd like to add this clear statement to the topic. It' s从http://developer.android.com/tools/help/image-asset-studio.html#saving
这是我试图解释差异的两分钱 . 在Android中处理图像时,有两种情况需要处理:
您想要为您的设备密度加载图像,并且您将使用它"as is",而不更改其实际大小 . 在这种情况下,您应该使用 drawables ,Android将为您提供最合适的图像 .
您想为设备密度加载图像,但此图像将按比例放大或缩小 . 例如,当您想要显示更大的启动器图标,或者您有动画时,需要这样做,这会增加图像的大小 . 在这种情况下,为了确保最佳图像质量,您应该将图像放入 mipmap 文件夹中 . Android会做的是,它会尝试从更高密度的存储桶中获取图像,而不是将其放大 . 这将增加图像的清晰度(质量) .
因此,决定将图像放入何处的经验法则是:
启动器图标始终进入 mipmap 文件夹 .
图像通常按比例放大(或按比例缩小),其质量对应用程序至关重要,也可以进入 mipmap 文件夹 .
所有其他图像通常 drawables .
我对mipmap的理解或多或少是这样的:
当需要绘制图像时,假设我们有不同的屏幕尺寸是分辨率,则必须进行一些缩放 .
如果您的图像适用于低端手机,当您将其缩放到10英寸平板电脑的尺寸时,您必须“发明”实际上不存在的像素 . 这是通过一些插值算法完成的 . 必须发明的像素数量越多,过程所需的时间越长,质量开始失败 . 使用更复杂的算法需要更长的时间来获得最佳质量(例如,周围像素的平均值与复制最近的像素相比) .
为了减少必须发明的像素数量,使用mipmap可以提供相同图像的不同尺寸/分辨率,系统将选择最接近必须渲染的分辨率的图像并从那里进行缩放 . 这应该减少发明像素的数量,节省用于计算这些像素的资源以提供高质量的图像 .
我在一篇文章中解释了这一点,解释了在缩放图像时libgdx中的性能问题:
http://www.badlogicgames.com/wordpress/?p=1403
4.3中的mipmaps的Android实现正是1983年维基百科文章中解释的技术:)
虽然这被描述为用于3D图形的技术(因为它提到“从远处观看”),但它也适用于2D(翻译为“绘制的是较小的空间”,即“缩小”) .
对于具体的Android示例,假设您有一个具有特定背景可绘制的视图(特别是
BitmapDrawable
) . 您现在使用动画将其缩放到原始大小的0.15 . 通常,这需要缩减每帧的背景位图 . 然而,这种"extreme"缩小可能会产生视觉伪像 .但是,您可以提供一个mipmap,这意味着图像已经预先渲染了几个特定的比例(例如1.0,0.5和0.25) . 每当动画“越过”0.5阈值时,不是继续缩小原始的1.0大小的图像,而是切换到0.5图像并缩小它,这应该提供更好的结果 . 等动画继续进行 .
这有点理论化,因为它实际上是由渲染器完成的 . 根据Bitmap类的来源,它只是一个提示,渲染器可能会也可能不会尊重它 .
我不太清楚为什么这会特别适合应用程序图标 . 虽然平板电脑上的Android以及一些 Launcher (例如GEL)请求图标"one density higher"显示更大,但这应该使用常规机制(即
drawable-xxxhdpi
,&c)来完成 .由于所有这些答案,谷歌似乎已经 updated their docs ,所以希望这将有助于未来的其他人:)我自己也遇到了这个问题,同时创建了一个新的(新的)项目 .
TL; DR:drawables可以作为dp特定资源优化的一部分被剥离 . Mipmap不会被剥离 .
(来自http://developer.android.com/tools/projects/index.html#mipmap)
https://plus.google.com/105051985738280261832/posts/QTA9McYan1L
mipmap有两种不同的用途:
用于构建密度特定APK时的启动器图标 . 一些开发人员为每个密度构建单独的APK,以保持APK大小 . 但是,某些 Launcher (随某些设备一起提供,或在Play商店中提供)使用比标准48dp更大的图标尺寸 . 启动器使用getDrawableForDensity并在需要时缩小,而不是向上,因此图标质量很高 . 例如,在hdpi平板电脑上,启动器可能会加载xhdpi图标 . 通过将启动器图标放在mipmap-xhdpi目录中,在为hdpi设备构建APK时,它不会像drawable-xhdpi目录那样被剥离 . 如果您正在为所有设备构建单个APK,那么这并不重要,因为启动程序可以访问可绘制资源以获得所需的密度 .
4.3中的实际mipmap API . 我没有用过这个并且不熟悉它 . 它没有被Android开源项目 Launcher 使用,我也不知道有任何其他 Launcher 使用 .
如果您为目标屏幕分辨率(如HDPI)构建APK,则Android资产打包工具AAPT可以删除您不需要的其他分辨率的drawable . 但如果它位于mipmap文件夹中,那么这些资产将保留在APK,无论目标分辨率如何 .
用于启动器的应用程序图标的MipMap
http://android-developers.blogspot.co.uk/2014/10/getting-your-apps-ready-for-nexus-6-and.html
https://androidbycode.wordpress.com/2015/02/14/goodbye-launcher-drawables-hello-mipmaps/