Desde Android 4.3 (Jelly Bean) ahora podemos hacer uso de las res/mipmap
carpetas para almacenar imágenes "mipmap".
Por ejemplo, Chrome para Android almacena sus iconos en estas carpetas en lugar de las res/drawable
carpetas más normales .
¿En qué se diferencian estas imágenes mipmap de las otras imágenes dibujables familiares?
Veo que en mi manifiesto, usamos el @mipmap/
calificador, en lugar de @drawable/
, lo que tiene sentido dado el nombre de la carpeta de recursos:
<activity
android:name=".MipmapDemp"
android:icon="@mipmap/ic_launcher" />
Referencias
El documento de las API de Android 4.3 tiene lo siguiente que decir:
Usar un mapa MIP como fuente para su mapa de bits o dibujable es una manera simple de proporcionar una imagen de calidad y varias escalas de imagen, lo que puede ser particularmente útil si espera que su imagen se escale durante una animación.
Android 4.2 (API nivel 17) agregó soporte para mipmaps en la clase de mapa de bits: Android intercambia las imágenes de mip en su mapa de bits cuando ha suministrado una fuente de mapa de mip y ha habilitado setHasMipMap (). Ahora, en Android 4.3, puede habilitar mapas mip para un objeto BitmapDrawable también, proporcionando un recurso mipmap y configurando el atributo android: mipMap en un archivo de recursos de mapa de bits o llamando a hasMipMap ().
No veo nada allí que me ayude a entender.
Los recursos de mapa de bits XML tienen una android:mipMap
propiedad:
Booleano Habilita o deshabilita la sugerencia de mipmap. Consulte setHasMipMap () para obtener más información. El valor predeterminado es falso.
Esto no se aplica a los íconos del iniciador hasta donde puedo ver.
La pregunta se planteó en Grupos de Google (¿ El propósito del nombre del recurso "mipmap"? ), A lo que Romain Guy respondió:
Es útil proporcionar una imagen con una resolución más grande que normalmente se calcularía (por ejemplo, en un dispositivo mdpi, Launcher puede querer que el ícono hdpi más grande muestre accesos directos de aplicaciones grandes).
Siento que esto casi tiene sentido, pero no del todo.
Todavía estoy dispuesto a seguir con el seguimiento de Randy Sugianto:
¿Cuáles son las ventajas de esto? ¿Hay alguna guía sobre cómo usar mipmaps, probablemente para mejores íconos de inicio?
Por supuesto, Wikipedia tiene una página para "Mipmap" , que se refiere a una técnica más antigua inventada en 1983, que no puedo identificar con la implementación actual de Android.
¿Deberíamos almacenar todos los íconos deres/mipmap
nuestras aplicaciones en carpetas estos días, y cuáles son las pautas para estas imágenes mipmap?
Actualización n. ° 1
Aquí hay una publicación de blog que intenta explicarlo un poco.
Pero la imagen utilizada en esa publicación de blog muestra lo que parece un archivo con muchos logotipos. Esto no es lo que veo en la carpeta mipmap de Chrome.
La mipmap-hdpi
carpeta de Chrome contiene tres imágenes. Uno es el logotipo de Chrome, por sí solo.
Curiosamente, es 72x72, no 48x48 lo que esperaría ver.
Quizás eso es todo lo que hay que hacer: ¿solo necesitamos mantener íconos más grandes en las carpetas de mipmap?
Actualización n. ° 2
La publicación de Android Developers Blog del 23/10/2014 confirma nuevamente la idea de usar las mipmap
carpetas para los iconos de las aplicaciones:
Al hablar sobre la densidad de pantalla del Nexus 6, el autor escribe:
Es una buena práctica colocar los íconos de su aplicación en carpetas mipmap (no en las carpetas dibujables) porque se usan en resoluciones diferentes de la densidad actual del dispositivo. Por ejemplo, se puede usar un icono de la aplicación xxxhdpi en el iniciador para un dispositivo xxhdpi.
Actualización n. ° 3
Tenga en cuenta que Android Studio crea los ic_launcher.png
íconos en las mipmap...
carpetas en lugar de las drawable...
carpetas que Eclipse usó para crearlos.
fuente
Parece que Google ha actualizado sus documentos desde todas estas respuestas, así que espero que esto ayude a alguien más en el futuro :) Acabo de encontrar esta pregunta yo mismo, al crear un nuevo (nuevo nuevo) proyecto.
TL; DR: los elementos extraíbles pueden eliminarse como parte de la optimización de recursos específicos de dp. Mipmaps no se eliminarán.
(de http://developer.android.com/tools/projects/index.html#mipmap )
fuente
Aquí están mis dos centavos al tratar de explicar la diferencia. Hay dos casos con los que trata cuando trabaja con imágenes en Android:
Desea cargar una imagen para la densidad de su dispositivo y la va a usar "tal cual", sin cambiar su tamaño real . En este caso, debe trabajar con elementos extraíbles y Android le dará la mejor imagen de ajuste.
Desea cargar una imagen para la densidad de su dispositivo, pero esta imagen se ampliará o disminuirá . Por ejemplo, esto es necesario cuando desea mostrar un icono de iniciador más grande, o si tiene una animación, que aumenta el tamaño de la imagen. En tales casos, para garantizar la mejor calidad de imagen, debe colocar su imagen en la carpeta mipmap . Lo que Android hará es que intentará recoger la imagen de un cubo de mayor densidad en lugar de ampliarla. Esto aumentará la nitidez (calidad) de la imagen.
Por lo tanto, la regla general para decidir dónde colocar su imagen sería:
fuente
La implementación de Android de mipmaps en 4.3 es exactamente la técnica de 1983 explicada en el artículo de Wikipedia :)
Aunque esto se describe como una técnica para gráficos en 3D (ya que menciona "visualización desde una distancia"), se aplica igualmente a 2D (traducido como "dibujado es un espacio más pequeño", es decir, "reducido").
Para un ejemplo concreto de Android, imagine que tiene una Vista con cierto fondo dibujable (en particular, a
BitmapDrawable
). Ahora usa una animación para escalarla a 0.15 de su tamaño original. Normalmente, esto requeriría reducir el mapa de bits de fondo para cada cuadro. Sin embargo, esta reducción "extrema" puede producir artefactos visuales.Sin embargo, puede proporcionar un mapa MIP, lo que significa que la imagen ya está renderizada previamente para algunas escalas específicas (digamos 1.0, 0.5 y 0.25). Cada vez que la animación "cruza" el umbral de 0.5, en lugar de continuar reduciendo la escala de la imagen original de tamaño 1.0, cambiará a la imagen 0.5 y reducirá la escala, lo que debería proporcionar un mejor resultado. Y así sucesivamente a medida que la animación continúa.
Esto es un poco teórico, ya que en realidad lo hace el renderizador. Según la fuente de la clase Bitmap, es solo una pista, y el procesador puede o no honrarla.
Sin embargo, no estoy muy seguro de por qué esto sería especialmente adecuado para los iconos de aplicaciones. Aunque Android en tabletas, así como en algunos lanzadores (por ejemplo, GEL), solicite un icono de "una densidad más alta" para mostrarlo más grande, se supone que esto se debe hacer utilizando el mecanismo regular (es decir
drawable-xxxhdpi
, & c).fuente
drawable
carpetas que también contienen imágenes mipmapped.drawable-nostrip
o algo así.https://plus.google.com/105051985738280261832/posts/QTA9McYan1L
fuente
Como estaba buscando una respuesta aclaratoria para determinar el tipo correcto de íconos de notificación, me gustaría agregar esta declaración clara al tema. Es de http://developer.android.com/tools/help/image-asset-studio.html#saving
fuente
Al construir aplicaciones separadas para diferentes densidades, se eliminan las carpetas dibujables para otras densidades. Esto hará que los íconos aparezcan borrosos en los dispositivos que usan íconos de inicio de mayor densidad. Como las carpetas mipmap no se eliminan, siempre es mejor usarlas para incluir los íconos del iniciador.
fuente
Cita de este artículo.
fuente
MipMap para el ícono de la aplicación para el iniciador
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/
fuente
drawable-XXX
y lasmipmap-XXX
carpetas realmente bien: el ícono del iniciador es diferente a otros recursos ya que es posible que se muestre un ícono de mayor resolución en el iniciador de usuarios. Si esa imagen de mayor resolución ha sido eliminada de su carpeta de dibujables, entonces un icono de menor densidad se ampliará mediante programación. Esto puede causar un icono borroso poco atractivo.Si crea un APK para una resolución de pantalla de destino como HDPI, la herramienta de empaquetado de activos de Android, AAPT, puede eliminar los elementos extraíbles para otra resolución que no necesite. Pero si está en la carpeta mipmap, estos activos permanecerán en el APK, independientemente de la resolución de destino.
fuente
La comprensión que tengo sobre mipmap es más o menos así:
Cuando se necesita dibujar una imagen, dado que tenemos diferentes tamaños de pantalla con resoluciones, tendrá que tomar parte una escala.
Si tiene una imagen que está bien para un teléfono celular de gama baja, cuando la escala al tamaño de una tableta de 10 ", debe" inventar "píxeles que realmente no existen. Esto se hace con algún algoritmo de interpolación. A mayor cantidad de píxeles que deben inventarse, más tiempo demora el proceso y la calidad comienza a fallar. La mejor calidad se obtiene con algoritmos más complejos que toman más tiempo (promedio de píxeles circundantes versus copiar el píxel más cercano, por ejemplo).
Para reducir la cantidad de píxeles que deben inventarse, con mipmap proporciona diferentes tamaños / soluciones de la misma imagen, y el sistema elegirá la imagen más cercana a la resolución que debe renderizarse y hará la escala desde allí. Esto debería reducir el número de píxeles inventados, ahorrando recursos para ser utilizados en el cálculo de estos píxeles para proporcionar una imagen de buena calidad.
Leí sobre esto en un artículo que explica un problema de rendimiento en libgdx al escalar imágenes:
http://www.badlogicgames.com/wordpress/?p=1403
fuente