Cómo centrar el vector dibujable en la lista de capas sin escala

Estoy intentando utilizar un VectorDrawable en una LayerList sin escalar el vector. Por ejemplo:

 <layer-list> <item android:drawable="@color/grid_item_activated"/> <item android:gravity="center" android:drawable="@drawable/ic_check_white_48dp"/> </layer-list> 

El identificador ic_check_white_48dp definido como:

 <vector xmlns:android="http://schemas.android.com/apk/res/android" android:width="48dp" android:height="48dp" android:viewportWidth="24.0" android:viewportHeight="24.0"> <path android:fillColor="#FFFFFFFF" android:pathData="M9,16.17L4.83,12l-1.42,1.41L9,19 21,7l-1.41,-1.41z"/> </vector> 

El efecto deseado es que el icono de cheque esté centrado en la capa dibujable, sin escala. El problema es que la lista de capas anterior hace que el icono de comprobación se ajuste a la escala del tamaño de la capa.

Puedo producir el efecto deseado si reemplazo el vector drawable con PNGs para cada densidad y modifico la capa-lista como tal:

 <layer-list> <item android:drawable="@color/grid_item_activated"/> <item> <bitmap android:gravity="center" android:src="@drawable/ic_check_white_48dp"/> </item> </layer-list> 

¿Hay alguna manera que puedo hacer esto usando un VectorDrawable ?

2 Solutions collect form web for “Cómo centrar el vector dibujable en la lista de capas sin escala”

Me encontré con el mismo problema tratando de centro vectores drawables en una lista de capas.

Tengo una solución, su no exactamente igual pero trabaja, usted necesita fijar un tamaño para el todo drenable y agregar el relleno al artículo del vector:

 <?xml version="1.0" encoding="utf-8"?> <layer-list xmlns:android="http://schemas.android.com/apk/res/android"> <item> <shape> <size android:height="120dp" android:width="120dp"/> <solid android:color="@color/grid_item_activated"/> </shape> </item> <item android:top="24dp" android:bottom="24dp" android:left="24dp" android:right="24dp" android:drawable="@drawable/ic_check_white_48dp"/> </layer-list> 

El tamaño de la forma anterior establece el tamaño de todo el dibujable, 120dp en este ejemplo, el relleno en el segundo elemento, 24dp en este ejemplo, centra la imagen vectorial.

No es lo mismo que usar la gravity="center" sino su forma de trabajo de utilizar vectores en API 21 y 22.

Ha estado luchando con el mismo problema. La única manera que encontré para arreglar esto y evitar el dibujable para escalar fue establecer el tamaño de dibujar y utilizando la gravedad para alinearla:

 <layer-list> <item android:drawable="@color/grid_item_activated"/> <item android:gravity="center" android:width="48dp" android:height="48dp" android:drawable="@drawable/ic_check_white_48dp"/> </layer-list> 

¡Espero eso ayude!

  • ¿Cómo tener un selector de dibujos vectoriales?
  • ¿Puedo usar un vector dibujable de la misma manera que usé un parche 9?
  • Android: Cómo establecer el color de trazo para el vector dibujable mediante programación
  • Problema de renderización de VectorDrawable
  • AnimatedVectorDrawable no anima
  • Vector de etiqueta dibujable no válido
  • Cómo cambiar el color de la trayectoria del vector drenable en el botón de clic
  • Android Layer-List VectorDrawable tamaño
  • Descripción de las propiedades VectorDrawable de Android
  • ¿Puedo usar el archivo vectorial dibujable en el icono del menú de ActionBar?
  • Cómo crear Android VectorDrawables de Illustrator (u otra herramienta similar)?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.