android - studio - VectorDrawable no se procesa correctamente en API 23
vector drawable android (3)
En primer lugar, no soy un desarrollador de Android, soy un diseñador que asiste con algunos activos de producción en Android Studio.
Comenzamos a experimentar los mismos problemas con algunos de nuestros vectores dibujables, desde 22 hasta 24.
(Actualicé mi proyecto para usar Nexus 6 API 23 y compilar la Versión 24, compilación de la versión 24, SDK de destino 24. Luego mis objetos dibujables parecían estar cerrando caminos y agregando rellenos similares a lo que está sucediendo arriba).
Intentó
Tengo acceso a Adobe Illustrator CC (19.2.1) y he estado explorando varias opciones de ruta en un objeto con un trazo. Todo, desde expandir rutas hasta rellenos, combinar rutas, hacer rutas compuestas, cerrar rutas, etc. sin suerte.
Opciones de convertidor
El convertidor en línea de SVG a Drawable ( http://inloop.github.io/svg2android/ ) tiene una opción, " Bake se transforma en ruta (experimental) " , y seleccioné eso y aunque mejoró el renderizado, NO fue perfecto todavía. .
Solucion potencial
Luego volví a Illustrator e intenté " Guardar como " SVG contra " Exportar " como SVG. No estoy seguro de cuáles son las diferencias de Adobe Illustrator entre las dos configuraciones, pero escupen datos XML SVG ligeramente diferentes.
Luego tomé el nuevo "Guardar como SVG" y lo coloqué en este convertidor de Drawable en línea: http://inloop.github.io/svg2android/
Y tenía estas opciones marcadas:
- Eliminar grupos vacíos sin atributos
- Hornear se transforma en camino (experimental)
El nuevo XML de Drawable que devolvió parece estar funcionando y representándose correctamente.
No estoy seguro de si esto funcionará con otros gráficos vectoriales que tengan trazos, formas y rellenos, pero pensé que compartiría mi experiencia. Esta no es una solución real, ya que parece ser un error en el nuevo SDK de Android, y ya lo había admitido anteriormente, pero puede ser una posible solución temporal para algunas personas.
Estoy reemplazando todos mis íconos con VectorDrawables siempre que sea posible. Pero noté que un par de ellos no se procesan correctamente en API 23 y el color parece estar desangrándose. Uno de estos 3 hace bien. Aquí hay una captura de pantalla de un proyecto aislado que creé:
Se ve perfectamente bien en API 21:
El código fuente de la aplicación de muestra está aquí.
Estoy usando AppCompat 24.0.0, app: srcCompat en ImageView y he configurado vectorDrawables.useSupportLibrary = true. También probé AppCompat 23.4.0 con el objetivo 23. Sin embargo, si elimino appCompat y establezco minSdkVersion en 21 y uso soporte de vectores nativos, los resultados no cambian. El IDE no se queja de nada que no sea compatible. ¿Cómo puedo averiguar cuál es el problema? ¿Es un error de plataforma? ¿Hay alguna solución?
Lea este medio para obtener una explicación más detallada https://medium.com/androiddevelopers/using-vector-assets-in-android-apps-4318fd662eb9
TL; DR
android {
defaultConfig {
vectorDrawables.useSupportLibrary = true
}
}
Utilizar
app:srcCompat
app:buttonCompat
app:drawableStartCompat...
En lugar de
android:src
android:button
android:drawableStart
Programáticamente
AppCompatResources.getDrawable(context, R.drawable.my_drawable)
Tuve exactamente el mismo problema en API 23 solamente. Estaba configurando mi fuente de ImageView dinámicamente, en lugar de en xml. Me di cuenta de que el problema era que estaba haciendo:
Drawable show = getContext().getResources().getDrawable(resourceId);
Cuando debería haber estado haciendo:
Drawable show = AppCompatResources.getDrawable(getContext(), resourceId);
¡Espero que esto ayude a alguien!