mipmap 翻譯過(guò)來(lái)就是紋理映射技術(shù),mipmap文件夾下的圖標(biāo)會(huì)通過(guò)Mipmap紋理技術(shù)進(jìn)行優(yōu)化。android 中的 mipmap 技術(shù)主要為了應(yīng)對(duì)圖片大小縮放的處理,在android 中我們提供一個(gè) bitmap 圖片,由于應(yīng)用的需要(比如縮放動(dòng)畫(huà)),可能對(duì)這個(gè) bitmap 進(jìn)行各種比例的縮小,為了提高縮小的速度和圖片的質(zhì)量邑商,android 通過(guò) mipmap 技術(shù)提前對(duì)按縮小層級(jí)生成圖片預(yù)先存儲(chǔ)在內(nèi)存中摄咆,這樣就提高了圖片渲染的速度和質(zhì)量。
api 中通過(guò) Bitmap 的 public final void setHasMipMap (boolean hasMipMap) 方法可以讓系統(tǒng)渲染器嘗試開(kāi)啟 Bitmap 的 mipmap 技術(shù)人断。但是這個(gè)方法只能建議系統(tǒng)開(kāi)啟這個(gè)功能吭从,至于是否正真開(kāi)啟,還是由系統(tǒng)決定恶迈。
res 目錄下面 mipmap 和 drawable 的區(qū)別也就是上面這個(gè)設(shè)置是否開(kāi)啟的區(qū)別涩金。mipmap 目錄下的圖片默認(rèn) setHasMipMap 為 true,drawable 默認(rèn) setHasMipMap 為 false暇仲。
經(jīng)過(guò)查詢(xún)官方和第三方資料步做,得出結(jié)論:
mipmap文件夾下,僅僅建議放啟動(dòng)圖標(biāo)/app launcher icons奈附,也就是應(yīng)用安裝后全度,會(huì)顯示在桌面的那個(gè)圖標(biāo)。google 建議大家只把 app 的啟動(dòng)圖標(biāo)放在 mipmap 目錄中桅狠,其他圖片資源仍然放在 drawable 下面讼载。
關(guān)于Mipmap紋理技術(shù)的介紹
在三維世界中,顯示一張圖的大小與攝象機(jī)的位置有關(guān),近的地方,圖片實(shí)際象素就大一些,遠(yuǎn)的地方圖片實(shí)際象素就會(huì)小一些,就要進(jìn)行一些壓縮,例如一張64*64的圖,在近處,顯示出來(lái)可能是50*50,在遠(yuǎn)處可能顯示出來(lái)是20*20.
如果只限于簡(jiǎn)單的支掉某些像素,將會(huì)使縮小后的圖片損失很多細(xì)節(jié),圖片變得很粗糙,因此,圖形學(xué)有很多復(fù)雜的方法來(lái)處理縮小圖片的問(wèn)題,使得縮小后的圖片依然清晰,然而,這些計(jì)算都會(huì)耗費(fèi)一定的時(shí)間.
Mipmap紋理技術(shù)是目前解決紋理分辨率與視點(diǎn)距離關(guān)系的最有效途徑,它會(huì)先將圖片壓縮成很多逐漸縮小的圖片,例如一張64*64的圖片,會(huì)產(chǎn)生64*64,32*32,16*16,8*8,4*4,2*2,1*1的7張圖片,當(dāng)屏幕上需要繪制像素點(diǎn)為20*20 時(shí)轿秧,程序只是利用 32*32 和 16*16 這兩張圖片來(lái)計(jì)算出即將顯示為 20*20 大小的一個(gè)圖片中跌,這比單獨(dú)利用 32*32 的那張?jiān)计?jì)算出來(lái)的圖片效果要好得多,速度也更快.```
用法不同
以ic_launcher為例菇篡。
1.放在mipmap文件夾下時(shí)漩符,引用方式如下:
``` android:icon="@mipmap/ic_launcher"R.mipmap.ic_launcher ```
2.放在drawable文件夾下時(shí),引用方式如下:
``` android:icon="@drawable/ic_launcher"R.drawable.ic_launcher ```
官方介紹:
Mipmapping for drawablesUsing a mipmap as the source for your bitmap or drawable is a simple way to provide a quality image and various image scales, which can be particularly useful if you expect your image to be scaled during an animation.[Android](https://www.baidu.com/s?wd=Android&tn=44039180_cpr&fenlei=mv6quAkxTZn0IZRqIHckPjm4nH00T1Y4njnYmHc4nWTkPWIhn1NB0ZwV5Hcvrjm3rH6sPfKWUMw85HfYnjn4nH6sgvPsT6KdThsqpZwYTjCEQLGCpyw9Uz4Bmy-bIi4WUvYETgN-TLwGUv3ErjTYnWDdrHm3PWTsn16sPjRz) 4.2 (API level 17) added support for mipmaps in the Bitmap class—[Android](https://www.baidu.com/s?wd=Android&tn=44039180_cpr&fenlei=mv6quAkxTZn0IZRqIHckPjm4nH00T1Y4njnYmHc4nWTkPWIhn1NB0ZwV5Hcvrjm3rH6sPfKWUMw85HfYnjn4nH6sgvPsT6KdThsqpZwYTjCEQLGCpyw9Uz4Bmy-bIi4WUvYETgN-TLwGUv3ErjTYnWDdrHm3PWTsn16sPjRz) swaps the mip images in your Bitmap when you've supplied a mipmap source and have enabled setHasMipMap(). Now in [Android](https://www.baidu.com/s?wd=Android&tn=44039180_cpr&fenlei=mv6quAkxTZn0IZRqIHckPjm4nH00T1Y4njnYmHc4nWTkPWIhn1NB0ZwV5Hcvrjm3rH6sPfKWUMw85HfYnjn4nH6sgvPsT6KdThsqpZwYTjCEQLGCpyw9Uz4Bmy-bIi4WUvYETgN-TLwGUv3ErjTYnWDdrHm3PWTsn16sPjRz) [4.3](https://www.baidu.com/s?wd=4.3&tn=44039180_cpr&fenlei=mv6quAkxTZn0IZRqIHckPjm4nH00T1Y4njnYmHc4nWTkPWIhn1NB0ZwV5Hcvrjm3rH6sPfKWUMw85HfYnjn4nH6sgvPsT6KdThsqpZwYTjCEQLGCpyw9Uz4Bmy-bIi4WUvYETgN-TLwGUv3ErjTYnWDdrHm3PWTsn16sPjRz), you can enable mipmaps for a BitmapDrawable object as well, by providing a mipmap asset and setting the android:mipMap attribute in a bitmap resource file or by calling hasMipMap().
應(yīng)用場(chǎng)景:
If you know that you are going to draw this bitmap at less than 50% of its original size, you may be able to obtain a higher quality by turning this property on. Note that if the renderer respects this hint it might have to allocate extra memory to hold the mipmap levels for this bitmap.
最好就是放啟動(dòng)的應(yīng)用圖標(biāo)驱还。也沒(méi)有推薦你把其他的資源圖片放在這里面嗜暴,可能因?yàn)闀?huì)壓縮導(dǎo)致顯示問(wèn)題吧,畢竟分辨率奇葩的手機(jī)一大堆议蟆。