Antecedentes
He notado que Android ahora admite algún tipo de dibujo vectorial, a través de una clase llamada " VectorDrawable " (y también AnimatedVectorDrawable , BTW). Lo descubrí mirando las novedades de Android-Studio .
Me pregunto si esto sería el fin de tener que poner varios archivos en varias carpetas ( mdpi
, hdpi
, xhdpi
, etc.). Eso sería genial y podría minimizar el tamaño de las aplicaciones en algunos casos.
Las preguntas
Me gustaría hacer algunas preguntas sobre esta nueva clase:
¿Es posible usarlo en versiones anteriores de Android, tal vez a través de una biblioteca incluso de la biblioteca de soporte de Google?
No estoy familiarizado con su funcionamiento, pero ¿puede Lollipop manejar archivos SVG? ¿Puede hacer algo que se pueda lograr en archivos SVG?
¿Hay alguna muestra / tutorial / video de su uso, además de la documentación que encontré?
fuente
s a very usefull tool but I
un resultado incorrecto en tal caso y no sé qué está mal ... Hmmm, para una versión posterior, desearía que esta herramienta notificara sobre un formato incorrecto ... Si usé archivos svg puros con bibliotecas de terceros, todo está bien ...Respuestas:
ACTUALIZACIÓN Marzo de 2016
Mediante la actualización de Android Support Library 23.2.1 , admite elementos de diseño vectoriales y elementos de diseño animados de vectores (también puede usar latestone para lo mismo)
Actualice la versión de una biblioteca en el archivo gradle.
compile 'com.android.support:recyclerview-v7:23.2.1'
Los elementos de diseño vectoriales le permiten reemplazar varios activos png con un solo gráfico vectorial , definido en XML. Si bien limitado previamente a Lollipop y los dispositivos superiores , tanto
VectorDrawable
yAnimatedVectorDrawable
ahora están disponibles a través de dos nuevas bibliotecas Soporte de apoyo-vector-estirable y -vector-dibujable animada. nuevoapp:srcCompat
atributo para hacer referencia a elementos de diseño vectoriales.Verifique la fuente en github con algunos ejemplos de muestra .
Cambios para la biblioteca appcompat v7:
Se revirtió la dependencia de los activos vectoriales para que los desarrolladores que usan la biblioteca appcompat no se vean obligados a usar
VectorDrawable
sus indicadores de compilación asociados.fuente
compile
declaración anterior implica que el proyecto utiliza loRecyclerView
que no siempre es el caso.Actualización 2 : Lo habilitan nuevamente en la Biblioteca de soporte 23.4.0:
Compruebe este 23.4.0 disponible ahora
Actualización : esto no funciona desde la versión 23.3.0. Consulte aquí para obtener más detalles. Los elementos de diseño proxy no funcionan.
app:srcCompat
ysetImageResource()
trabajo, sin embargo.La compatibilidad con Vector Drawable está disponible en la biblioteca de compatibilidad de la versión 23.2 y posteriores. Sin embargo, para usar correctamente esos elementos de diseño, se debe hacer referencia a ellos indirectamente.
El primer paso sería mejorar la
AppCompat
versión.compile 'com.android.support:appcompat-v7:23.2.0'
En segundo lugar, habilite el soporte Vector Drawable. Si usa el complemento de Gradle, 2.0+
android { defaultConfig { vectorDrawables.useSupportLibrary = true } }
De otra manera
android { defaultConfig { generatedDensities = [] } aaptOptions { additionalParameters "--no-version-vectors" } }
En tercer lugar , consulte la respuesta vinculada .
fuente
MenuItem
, que funciona bien.Puede probar esta biblioteca de soporte . Es compatible con VectorDrawable y AnimatedVectorDrawable introducido en Lollipop con compatibilidad total con versiones anteriores.
fuente
Para complementar algunas de las respuestas aquí: sí, puede obtener soporte para VectorDrawables pre-Lollipop , al menos parcial.
¿Qué tan parcial? Depende. He creado este diagrama para ayudar (válido para Support Library 23.4.0 hasta, al menos, 25.1.0).
fuente
Desafortunadamente, en este momento VectorDrawable y AnimatedVectorDrawable no están disponibles en la biblioteca de soporte. Pero para aprovechar esta función en las versiones Pre-Lollipop, puede usar el backport no oficial llamado MrVector.
MrVector está disponible en Github y será compatible con las versiones de Android 7+.
Del Léame oficial
Para agregar la dependencia MrVector, agregue la siguiente línea a su bloque de dependencias build.gradle.
compile 'com.telly:mrvector:0.2.0'
Para crear el elemento de diseño a partir del vector XML,
Espero que esto ayude.
fuente
Si está utilizando VectorDrawable, Android Studio generará automáticamente archivos PNG de acuerdo (basados en sus archivos XML) para las versiones Pre-Lollipop.
Tenga en cuenta que esos archivos PNG generados se consideran BitmapDrawables en lugar de VectorDrawables en dispositivos que ejecutan API por debajo de 21 y, por lo tanto, no se pueden animar o similar en esos dispositivos.
Consulte "compatibilidad con versiones anteriores" para obtener más detalles: http://android-developers.blogspot.co.at/2015/09/android-studio-14.html
fuente
Lollipop no puede manejar archivos SVG sin bibliotecas de terceros.
La mejor solución que encontré es BetterVectorDrawable lib junto con SVG to VectorDrawable Converter .
BetterVectorDrawable es la implementación de VectorDrawable para Android 4.0+ con comportamiento alternativo configurable en Android 5.0+.
SVG to VectorDrawable Converter es el conversor por lotes de imágenes SVG a archivos de recursos XML VectorDrawable de Android. Versión en línea
Los enlaces apuntan a archivos Léame, que proporcionan suficiente información sobre cómo utilizar la biblioteca y el convertidor.
fuente
No hay VectorDrawables en la biblioteca de soporte en este momento.
Funkystein tiene razón: VectorDrawable es similar a SVG, solo admite las funciones de dibujo vectorial que tienen mayor demanda para que Android pueda centrarse en el rendimiento. pathData, por ejemplo, tiene el mismo formato que la cadena "d" de SVG.
fuente
¡La gran noticia es que Google lanzó la biblioteca de soporte de Android 23.2 compatible con elementos de diseño vectoriales animados y elementos de diseño vectoriales animados!
¡Pero gracias a las personas que portaron esta biblioteca antes que Google!
Guía de uso:
Consulte la " edad de los vectores " por @chrisbanes
fuente