Soporte SVG en Android

Respuestas:

56

La respuesta más completa es esta:

  • El navegador predeterminado de Android 2.x no es compatible de forma nativa con SVG.
  • Los navegadores predeterminados de Android 3+ SÍ admiten SVG.

Para agregar soporte SVG a las versiones 2.x de la plataforma, tiene dos opciones básicas:

  1. Instale un navegador más capaz (como Firefox u Opera Mobile, ambos admiten SVG)
  2. Utilice un polyfill de JavaScript que pueda analizar SVG y representarlo en un lienzo HTML5

La primera opción está bien si solo está tratando de hacer que SVG funcione para usos personales o para un conjunto limitado (controlable) de usuarios. No es una gran opción si desea utilizar SVG mientras se dirige a una gran base de usuarios no controlada.

En el último caso, desea utilizar un polyfill. Hay muchas bibliotecas de JavaScript disponibles en la actualidad que pueden convertir SVG y renderizar en un lienzo. Dos ejemplos son:

Usando un polyfill, puede renderizar su SVG en un canavs en todas las versiones de Android 2.x.

Para obtener un ejemplo más completo de este enfoque, puede consultar esta publicación de blog que analiza el uso de canvg polyfill para hacer que los gráficos Kendo UI DataViz (basados ​​en SVG) funcionen en Android 2.x. ¡Espero que ayude!

Todd
fuente
Hola, me gustaría saber para ImageView, si puedo cambiar el color del tiempo de ejecución de esa imagen svg.
Shreyash Mahajan
22

Hay una nueva biblioteca de código abierto que admite la carga y el dibujo de archivos SVG Basic 1.1: https://github.com/pents90/svg-android . El rendimiento es bueno ya que el dibujo real es manejado de forma nativa por un objeto android.graphics.Picture.

pents90
fuente
Para que no se pierda, agregaré un comentario aquí (como se menciona en la respuesta de @ Todd) Android 3+ admite SVG. Por lo tanto, no es necesario que los desarrolladores se preocupen por las bibliotecas si no están preocupados por los dispositivos Android más antiguos.
monotasker
9
En mi respuesta, me refiero a una biblioteca que permite a un desarrollador cargar y representar archivos SVG en sus aplicaciones. Android 3+ agrega soporte de navegador para SVG, pero no tiene soporte para SVG en su API de desarrollador.
pents90
Este no me funcionó desafortunadamente con Android 4.3. La imagen de muestra termina en blanco. Estoy usando el código exacto que está en la página del tutorial en el Wiki.
BVB
2
@BVB deberá desactivar la aceleración de hardware para que funcione en Android 4.x. Ver: stackoverflow.com/questions/10384613/… y stackoverflow.com/questions/8771219/…
pents90
Gracias, pero ¿no tendrá eso efectos negativos en otros lugares?
BVB
8

Hay una nueva biblioteca (en desarrollo activo) androidsvg que permite incorporar imágenes svg directamente en los proyectos. Tiene la ventaja de definir un SVGImageViewque permite incorporar un svg directamente en el diseño xml.

Finalmente, incluir svg en Android es sencillo.

Más detalles: Publicación de desbordamiento de pila

Abid H. Mujtaba
fuente
Esta biblioteca de svg realmente funciona. svg-android y sus bifurcaciones no aplicaron los estilos / css que definí en un grupo para los hijos del grupo. Este lo hace. Gracias.
domenukk
1

Sé que mi solución es algo dura, pero funciona muy bien, no requiere bibliotecas externas (al menos no en su código final) y es extremadamente rápida.

1) Simplemente tome una biblioteca de carga SVG existente, como por ejemplo svg-android-2 (que es una bifurcación de svg-android mencionada en otra respuesta, solo con más funciones y correcciones de errores): https://code.google.com / p / svg-android-2 /

2) Escriba una aplicación simple que no haga nada más que cargar y mostrar su imagen SVG.

3) Modifique la biblioteca de carga SVG, para que imprima el código Java que crea la clase Picture o lo guarde en una variable String.

4) Copie y pegue el código Java obtenido de esta manera en la aplicación que está escribiendo.

Para obtener más información sobre esta técnica y descargar un código fuente de muestra, vaya a mi blog: http://androiddreamrevised.blogspot.it/2014/06/transforming-svg-images-into-android.html

Puede obtener un ejemplo práctico de esta técnica en Google Play aquí: https://play.google.com/store/apps/details?id=pl.bartoszwesolowski.svgtodrawablesample

Aquí hay un ejemplo de una aplicación comercial creada con esta técnica (mapa del metro de Milán): https://play.google.com/store/apps/details?id=pl.bartoszwesolowski.atmmetroplan

Observe lo rápido que se carga el mapa y lo bonito que se ve, incluso cuando está ampliado.

Bartek
fuente
1

Echa un vistazo a Support vector drawable . Android Studio tiene una herramienta para convertir archivos SVG a archivos .XML.

al usar AppCompat con ImageView (o subclases como ImageButton y FloatingActionButton), podrá usar la nueva aplicación: atributo srcCompat para hacer referencia a elementos de diseño vectoriales (así como cualquier otro elemento de diseño disponible para android: src):

A partir de la biblioteca de soporte de Android 23.3.0, los elementos de diseño vectoriales de soporte solo se pueden cargar a través de la aplicación: srcCompat o setImageResource ()

Surya
fuente