drawableとmipmapの違い

2016/2/7 3810hit

Android Studioにおいてランチャーアイコンはそれまでのdrawable-密度/ic_launcher.pngからmipmap-密度/ic_launcher.pngに変わりました。
もちろん、名前が変わっただけじゃなくて実際の挙動も変わっているのですが、イマイチ地味な変化のためよく知られていないように思います。

結論

結論から言うとランチャーアイコンはmipmapにしましょう。

mipmapとは

Mipmapは3Dでよく使われる技術で、遠くのオブジェクトには荒いテクスチャ、近くのオブジェクトには細かいテクスチャを使用することでクオリティとメモリーを両立させる技術です。

Androidは3Dではないですが、drawableで似たようなことが行われています。
drawable-mdpiやdrawable-xxhdpiのように端末のピクセルサイズに応じてサイズの異なる画像を用意することで画面密度が荒い端末ではメモリー消費量を節約して、画面密度が細かい端末では高精細な画像を適用する qualifierという仕組みです。

通常であれば、それで良いのですが、3年前の日記で書いたように、最近の端末ではランチャーアイコンを拡大気味に表示している端末が有ります。
本気でAndroid用のアイコンを作る
例えばNexus5では本来アイコンは、48dpのxxhdpi(3倍)なので144x144pxとなるはずなのに実際には176x176pxに拡大して表示されます。

drawableとmipmapにおける挙動の違い

この時、drableに指定されている画像は、端末の物理的なピクセルサイズを元にxxhdpiの画像を使用します。
それに対してmipmapに指定されている画像は、描画するときの画面密度を元に適切な画像を切り替えてxxxhdpiの画像を使用します。

Nexus5(xxhdpi)においてic_launcherをdarawableに置いた場合とmipmapにおいた場合の画像
drawableではxxhdpiが使用されれているのに対してmipmapではxxxhdpiが使用されている。


一般的に画像では拡大より縮小のほうが画質劣化が少ないので、drawableなxxhdpiを拡大するよりmipmapなxxxhdpiを縮小したほうが画質の劣化を抑えることが出来ます。

それでは実際に同じ画像を元にmipmapを使用した場合とdrawableを使用した場合を見比べてみましょう。
左がdrawable、右がmipmapです。 drawableの方は144x144の画像を176x176に拡大したもの、mipmapは196x196の画像を176x176に縮小していることになります。


顔と胴体部分を見るとmipmapの方が輪郭がくっきりしているのがわかります。

拡大するとこんな感じ
drawableではエッジ部分がかなりぼやけているのがわかります。


ということで、アイコンランチャーはdrawableではなくmipmapを使ってxxxhdpiまでサポートすることをおすすめします。

前:Android Studioではじめる Androidアプリ開発 書評 次:Android Wearアプリ開発入門 書評

関連キーワード

[Android][イラスト][モバイル][IT]

コメントを投稿する

名前URI
コメント