Implementación de iconos adaptativos

Los íconos adaptables mantienen una forma constante dentro del dispositivo, pero varían de un dispositivo a otro con solo un recurso de ícono proporcionado por el desarrollador. Además, los íconos admiten dos capas (primer plano y fondo) que se pueden usar para el movimiento para brindar deleite visual a los usuarios.

Los implementadores de dispositivos proporcionan una máscara de dispositivo que decidirá la forma de todos los íconos en un dispositivo. Este ícono se usará en cualquier superficie de la interfaz de usuario del sistema que use íconos del iniciador (p. ej., iniciador, descripción general, configuración y hoja para compartir).

Ejemplos y fuente

Ejemplos de código:

  • platform/development/samples/AdaptiveIconSample/

Documentación del desarrollador:

Código fuente:

  • platform/frameworks/base/graphics/java/android/graphics/drawable/AdaptiveIconDrawable.java

Implementación

Para cambiar la forma del ícono en una plataforma, superponga una cadena en framework/base/core/res/res/values/config.xml , de la siguiente manera:

<!-- Specifies the path that is used by AdaptiveIconDrawable class to crop launcher icons. -->
    <string name="config_icon_mask" translatable="false">"M50,0L100,0 100,100 0,100 0,0z"</string>

El formato y la sintaxis de la cadena siguen el estándar W3, SVG para la definición de ruta . Este formato para PathData también es compatible con los elementos de diseño vectorial de Android.

Este camino debe ser convexo y debe respetar la zona segura (66/71 = 91 %) dentro de los límites de la vista. Esto se aplica en una de las pruebas CTS.

Si decide utilizar un círculo como máscara de plataforma, asegúrese de superponer también config_useRoundIcon = true. De lo contrario, establezca este valor de configuración en falso o no especifique este valor de configuración.

API de iconos adaptativos

La API para la clase AdaptiveIconDrawable se muestra a continuación:

package  android.graphics.drawable;
    public class AdaptiveIconDrawable extends Drawable implements Drawable.Callback {
    method public Drawable getBackground();
    method public Drawable getForeground();
    method public Path getIconMask();
    method public Region getSafeZone();
    method public float getExtraInsetFraction();
    method public int getOpacity();
    method public void invalidateDrawable(Drawable);
    method public void scheduleDrawable(Drawable, Runnable, long);
    method public void setAlpha(int);
    method public void setColorFilter(ColorFilter);
    method public void setOpacity(int);
    method public void unscheduleDrawable(android.graphics.drawable.Drawable, java.lang.Runnable);
    }
public class Icon extends Parceleable {
    method public Bitmap createWithAdaptiveBitmap();
    }

Implementación de referencia

No es necesario hacer nada para representar los íconos adaptativos estáticos en cualquiera de las superficies de la interfaz de usuario del sistema. Cuando PackageManager devuelve un dibujable, simplemente vincúlelo a un ImageView. Así es como ya se renderizan los íconos en las plataformas Pre-O.

Con respecto a la representación del efecto de movimiento dinámico, Launcher3 (plataforma/paquetes/aplicaciones/Launcher3) tendrá una implementación de referencia que muestra cómo lograr el efecto en O-MR1.

Validación

Para validar la implementación, después de anular la máscara de su agrado, vea si los íconos se representan correctamente en Launcher3, Configuración, Descripción general y Configuración. También puede ejecutar AdaptiveIconDrawableTest.java y AdaptiveIconMaskTest.java dentro de Graphics CTS TestCase para probar la implementación.

Puede encontrar un caso de prueba manual recomendado en: plataforma/desarrollo/samples/AdaptiveIconSample/.

Problemas conocidos

Los problemas conocidos incluyen los siguientes:

  • Iconos borrosos, dependiendo de cómo se defina la ruta de la máscara.
  • Iconos de acceso directo ampliados si los desarrolladores de aplicaciones no usan el método Icon.createWithAdaptiveBitmap() , o no usan este método correctamente. Para que este método funcione correctamente, el mapa de bits pasado debe tener un relleno del 25 % en los cuatro lados.

Estos problemas se pueden abordar de la siguiente manera:

  • La máscara debe definirse en el sistema de coordenadas [0, 100] x [0, 100].
  • Asegúrese de que las imágenes utilizadas para los iconos adaptables (iconos de inicio, accesos directos) tengan suficiente relleno (25 %) en los cuatro lados.