474 votes

Dessinables Mipmap pour les icônes

Depuis Android 4.3 (Jelly Bean), nous pouvons désormais utiliser la fonction res/mipmap des dossiers pour stocker les images "mipmap".

Par exemple, Chrome pour Android stocke ses icônes dans ces dossiers au lieu des dossiers habituels. res/drawable les dossiers.

En quoi ces images mipmap sont-elles différentes des autres images dessinables familières ?

Je vois que dans mon manifeste, on utilise le @mipmap/ au lieu du qualificatif @drawable/ ce qui est logique compte tenu du nom du dossier de ressources :

<activity
    android:name=".MipmapDemp"
    android:icon="@mipmap/ic_launcher" />

Références :

El API d'Android 4.3 a déclaré ce qui suit :

L'utilisation d'un mipmap comme source de votre bitmap ou de votre drawable est une manière simple de fournir une image de qualité et diverses échelles d'image, ce qui peut être particulièrement utile si vous prévoyez que votre image sera mise à l'échelle au cours d'une animation.

Android 4.2 (niveau 17 de l'API) a ajouté le support des mipmaps dans la classe Bitmap Android échange les images mip dans votre Bitmap lorsque vous avez fourni une source mipmap et que vous avez activé setHasMipMap(). Maintenant, dans Android 4.3, vous pouvez également activer les mipmaps pour un objet BitmapDrawable, en fournissant une ressource mipmap et en définissant l'attribut Android:mipMap dans un fichier de ressources bitmap ou en appelant hasMipMap().

Je n'y vois rien qui m'aide à comprendre.


Ressources XML Bitmap ont un android:mipMap propriété :

Booléen. Active ou désactive l'indice mipmap. Voir setHasMipMap() pour plus d'informations. plus d'informations. La valeur par défaut est false.

Pour autant que je sache, cela ne s'applique pas aux icônes du lanceur.


La question a été soulevée sur Google Groups ( A quoi sert le nom de ressource "mipmap" ? ! ), ce à quoi Romain Guy a répondu :

Il est utile de fournir une image à une résolution supérieure à celle qui serait qui serait normalement calculée (par exemple, sur un périphérique mdpi, Launcher pourrait vouloir l'icône hdpi plus grande pour afficher des raccourcis d'applications de grande taille).

J'ai l'impression que ça donne presque un sens à tout ça, mais pas tout à fait.

Je suis toujours enclin à aller avec le suivi de Randy Sugianto :

Quels en sont les avantages ? Existe-t-il un guide sur la façon d'utiliser mipmaps, probablement pour de meilleures icônes de lanceur ?


Bien sûr, Wikipédia a une page pour "Mipmap". qui fait référence à une technique plus ancienne inventée en 1983, que je n'arrive pas à relier à l'implémentation actuelle d'Android.


Devrions-nous stocker tous nos icônes d'application dans res/mipmap dossiers de nos jours, et quelles sont les directives pour ces images mipmap ?


Mise à jour n° 1

Voici un article de blog qui tente de l'expliquer un peu.

Mais l'image utilisée dans cet article de blog montre ce qui ressemble à un fichier contenant plusieurs logos. Ce n'est pas ce que je vois dans le dossier mipmap de Chrome.

Chrome's mipmap-hdpi contient trois images. L'une est le logo de Chrome, seul.

Chrome mipmap-hdpi icon.png

Étrangement, elle est de 72x72, et non de 48x48 comme je m'y attendais.

Peut-être que c'est tout ce qu'il y a à faire - nous devons juste garder des icônes plus grandes dans les dossiers mipmap ?


Mise à jour n°2

L'article du blog des développeurs Android du 23/10/2014 confirme à nouveau l'idée d'utiliser le mipmap pour les icônes des applications :

En parlant de la densité de l'écran du Nexus 6, l'auteur écrit :

La meilleure pratique consiste à placer les icônes de vos applications dans les dossiers mipmap- (et non dans les dossiers drawable-). dossiers drawable-) car elles sont utilisées à des résolutions différentes de la la densité de courant de l'appareil. Par exemple, une icône d'application en xxxhdpi peut être être utilisée sur le lanceur pour un appareil xxhdpi.


Mise à jour n°3

Notez qu'Android Studio crée le ic_launcher.png icônes dans le mipmap... plutôt que les dossiers drawable... dans lesquels Eclipse les a créés.


-1voto

Juan Points 183

La compréhension que j'ai de mipmap est plus ou moins la suivante :

Lorsqu'une image doit être dessinée, étant donné que nous avons des tailles d'écran et des résolutions différentes, il faut procéder à une mise à l'échelle.

Si vous avez une image qui convient à un téléphone portable bas de gamme, lorsque vous la mettez à l'échelle d'une tablette de 10 pouces, vous devez "inventer" des pixels qui n'existent pas réellement. Cela se fait à l'aide d'un algorithme d'interpolation. Plus il y a de pixels à inventer, plus le processus est long et la qualité commence à baisser. La meilleure qualité est obtenue avec des algorithmes plus complexes qui prennent plus de temps (moyenne des pixels environnants ou copie du pixel le plus proche par exemple).

Pour réduire le nombre de pixels qui doivent être inventés, avec mipmap vous fournissez différentes tailles/résolutions de la même image, et le système choisira l'image la plus proche de la résolution qui doit être rendue et fera la mise à l'échelle à partir de là. Cela devrait réduire le nombre de pixels inventés en économisant les ressources utilisées pour calculer ces pixels afin de fournir une image de bonne qualité.

J'ai lu ceci dans un article expliquant un problème de performance dans libgdx lors de la mise à l'échelle des images :

http://www.badlogicgames.com/wordpress/?p=1403

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X