我正在使用Android Studio 1.1 Preview 1.我注意到当我创建一个新项目时,我得到以下层次结构:

不同DPI的Mipmap文件夹,没有更多不同的DPI可绘制文件夹.
我应该将所有资源放在mipmap文件夹中,还是只放置应用程序图标?
从Android 4.3(Jelly Bean)开始,我们现在可以利用这些res/mipmap文件夹来存储"mipmap"图像.
例如,Chrome for Android将其图标存储在这些文件夹中,而不是更常用的res/drawable文件夹中.
这些mipmap图像与其他熟悉的可绘制图像有何不同?
我看到在我的清单中,我们使用@mipmap/限定符,而不是@drawable/,这对于资源文件夹名称是有意义的:
<activity
android:name=".MipmapDemp"
android:icon="@mipmap/ic_launcher" />
Run Code Online (Sandbox Code Playgroud)
在Android 4.3的API的文档具有下面要说:
使用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资源具有以下android:mipMap属性:
布尔.启用或禁用mipmap提示.有关更多信息,请参见setHasMipMap().默认值为false.
就我所见,这不适用于启动器图标.
问题出现在Google网上论坛(资源名称"mipmap"的目的?!)上,Romain Guy回复道:
提供通常可以计算的更大分辨率的图像很有用(例如,在mdpi设备上,Launcher可能希望更大的hdpi图标显示大型应用程序快捷方式.)
我觉得这几乎是有意义的,但并不完全.
我仍然倾向于选择Randy Sugianto的跟进:
这有什么好处?是否有任何指南如何使用mipmap,可能是为了更好的启动器图标?
当然,维基百科有一个"Mipmap"页面,它指的是一种1983年发明的旧技术,我无法与当前的Android实现相关联.
我们现在应该将所有应用程序图标res/mipmap存储在文件夹中吗?这些mipmap图像的准则是什么?
更新#1
这是一篇博文,试图解释一下.
但是该博客文章中使用的图像显示了一个包含许多徽标的文件.这不是我在Chrome的mipmap文件夹中看到的.
Chrome的mipmap-hdpi文件夹包含三张图片.一个是Chrome徽标,单独使用.

奇怪的是,它是72x72,而不是48x48,我希望看到.
也许这就是全部 - 我们只需要在mipmap文件夹中保留更大的图标?
更新#2
2014年10月23日的Android开发者博客文章再次证实了将mipmap文件夹用于应用程序图标的想法:
我正在使用Android Asset Studio生成我的启动器图标,我已经看到输出现在正在创建mipmap文件夹而不是可绘制文件夹.
由于Android 4.2和我的应用程序针对ICS 4.0.3(API 15),因此添加了mipmap支持.使用它们是否安全?然后在drawables文件夹中没有任何ic_launcher图标?
更新我确认它工作正常.您只能将"mipmap"文件夹用于"应用程序"图标
如何以mipmap编程方式从文件夹加载图像(与drawables一样)?
img.setImageResource(imageId);
Run Code Online (Sandbox Code Playgroud)
我使用的是Android Studio 1.2.1.
没关系,我是第一个创建纹理的人,我应该非常清楚我为它加载/生成了多少个mipmap.我这样做是为了进行单元测试.似乎没有一个glGetTexParameter参数可以找到它.我最接近的是这样的:
int max_level;
glGetTexParameter( GL_TEXTURE_2D, GL_TEXTURE_MAX_LEVEL, &max_level );
int max_mipmap = -1;
for ( int i = 0; i < max_level; ++i )
{
int width;
glGetTexLevelParameter( GL_TEXTURE_2D, i, GL_TEXTURE_WIDTH, &width );
if ( 0 == width )
{
max_mipmap = i-1;
break;
}
)
Run Code Online (Sandbox Code Playgroud)
无论如何,glGetTexLevelParameter()如果我使用的是NVidia GPU,将为不存在的mipmap返回0宽度,但是对于Mesa,它会返回GL_INVALID_VALUE,这让我相信这是非常错误的事情.
如何找出我填充纹理的mipmap级别?
我想知道如果我使用自己的算法预生成它们而不是内置的自动算法,纹理mipmap的质量是否会更好.我可能会使用一个缓慢而漂亮的算法,比如Lanczos重新采样.
是否有意义?我会在现代显卡上获得任何质量提升吗?
在GLSL片段着色器中对纹理进行采样时,如何确定使用的mipmap级别?
我知道我可以使用以下textureLod(...)方法手动采样纹理的特定mipmap级别:
uniform sampler2D myTexture;
void main()
{
float mipmapLevel = 1;
vec2 textureCoord = vec2(0.5, 0.5);
gl_FragColor = textureLod(myTexture, textureCoord, mipmapLevel);
}
Run Code Online (Sandbox Code Playgroud)
或者我可以允许使用texture(...)like 自动选择mipmap级别
uniform sampler2D myTexture;
void main()
{
vec2 textureCoord = vec2(0.5, 0.5);
gl_FragColor = texture(myTexture, textureCoord);
}
Run Code Online (Sandbox Code Playgroud)
我更喜欢后者,因为我相信司机对合适的mipmap级别的判断比我自己的更多.
但我想知道在自动采样过程中使用了什么mipmap级别,以帮助我合理地对附近的像素进行采样.GLSL中是否有一种方法可以访问有关自动纹理样本使用的mipmap级别的信息?
我很了解mipmapping.我不明白(在硬件/驱动程序级别)是mipmapping如何提高应用程序的性能(至少这通常是声称).驱动程序在执行片段着色器之前不知道哪个mipmap级别将被访问,所以无论如何所有的mipmap级别都需要存在于VRAM中,或者我错了?
究竟是什么导致了性能提升?
每当我尝试使用AndroidStudio生成一个新的Android项目时,它都会隐藏文件夹"drawables".这在我之前从未发生过.我一直在环顾四周,我意识到它已经生成了这个名为"mipmap"的文件夹.我搜索了一下,我发现这与drawables类似,但是在我错过的新AndroidStudio版本中这是一个很大的变化吗?如果不是,我怎么能得到我的Drawables文件夹?我已经尝试重建我的项目,创建新项目甚至删除我的所有AndroidStudio缓存,首选项和日志.PS我在OSX上.

我最近将 Min SDK 版本设置为 26。我运行代码检查器来检查警告,它要求我将 mipmap-anydpi-v26 中的文件移动到名为 mipmap-anydpi 的文件夹中,我照做了。
但是,当我再次运行代码检查器时,它显示:
图标指定为 .xml 文件和位图
和
以下图像同时显示为与密度无关的“.xml”文件和位图文件:src/main/res/mipmap-anydpi/ic_launcher.xml、src/main/res/mipmap-hdpi/ic_launcher.png
现在,我很困惑。我是否删除密度无关的 .XML 文件或存储在 mipmap-hdpi 等中的位图 (png) 文件。或者我是否将 XML 文件移动到其他地方或什么?