¿Cómo crear imágenes vectoriales adecuadas que se puedan usar como un vector dibujable de Android?

Soy bastante nuevo en la creación de imágenes vectoriales. Empecé a aprender cómo crearlos porque necesito algunos íconos personalizados para una aplicación de Android en la que estoy trabajando actualmente. Y aquí empieza el problema. Estoy creando los íconos usando Inkscape y cuando trato de convertirlos en un VectorDrawable usando Android Studio, devuelve un error sobre no admitir ciertas cosas:

ERROR@ line 22 <defs> is not supported
WARNING@ line 139 We don't scale the stroke width!
WARNING@ line 144 We don't scale the stroke width!
WARNING@ line 150 We don't scale the stroke width!
WARNING@ line 156 We don't scale the stroke width!
WARNING@ line 162 We don't scale the stroke width!
WARNING@ line 168 We don't scale the stroke width!
WARNING@ line 174 We don't scale the stroke width!

Primero intenté convertir de alguna manera la ruta en un objeto dentro de Inkscape, pero esto no funcionó. Luego busqué algunas soluciones en la web y encontré el siguiente sitio web: http://inloop.github.io/svg2android/ Allí pude convertir el ícono pero ahora solo puedo usarlo Android 7.0 y superior porque usé el atributo ' regla de relleno: par impar'.

Ahora aquí está mi pregunta: ¿Cómo asegurarme de que solo uso los atributos adecuados al crear un ícono y cómo puedo hacer que mi ícono funcione en Android?

Si desea seguir mi intento de solucionar el problema, aquí puede descargar mi archivo SVG: https://dl.dropboxusercontent.com/u/213285061/Foren/Biologie_Icon.svg

Gracias por cada consejo.

@Scribblemacher, mi problema no es convertir un svg en un vector dibujable, sino mi uso de "atributos svg" que no son compatibles con Android. Quería saber cómo evitar el uso de esos atributos o cómo reemplazarlos por otros compatibles.
Sigo pensando que esto es un duplicado. VectorDrawable no es un SVG. Si tiene un SVG, debe pasar por algún tipo de conversión. Depende de ese programa de conversión mapear/transformar el SVG en un XML VectorDrawable. Se trata de evitar lo que no es compatible con su cadena de herramientas de conversión, lo que podría causar docenas y docenas de cosas (el estándar SVG es enorme).
Para resolver su problema real, le sugiero que intente guardar como "SVG simple" en Inkscape, lo que eliminará el contenido no estándar que generalmente se encuentra en el espacio de inkscape:nombres. Es posible que Android Studio se tropiece con los datos de espacios de nombres utilizados por Inkscape en el formato de guardado predeterminado.
Gracias @Scribblemacher, esto realmente resolvió mi problema. No pensé que sería tan fácil. Por alguna razón, sigo recibiendo los mismos mensajes de error al importar a Android Studio, pero esta vez funciona. Muchas gracias, ya he estado buscando horas para arreglar esto.
me alegro de haber ayudado Agregué una respuesta y algunos detalles más sobre por qué esto probablemente sucede como respuesta.
Guardar como un "SVG simple" en Inkscape no me ayudó. En cambio, todo funciona si elimina la agrupación adicional de objetos en Editar -> Editor XML. Simplifico la estructura de íconos y dejo solo el grupo raíz, luego Android Studio crea correctamente Vector Drawables.

Respuestas (1)

Solución

Guardar como un "SVG simple" en Inkscape.

Nota: A partir de Inkscape 0.91, si guarda como "SVG simple" y luego simplemente hace "Guardar" normal, se guardará nuevamente como un SVG de Inkscape. Por lo tanto, deberá guardar y seleccionar explícitamente SVG simple cada vez.

Pregunta relacionada sobre la conversión de SVG a VectorDrawable: XML de exportación de Inkscape para el directorio de recursos dibujables de Android

Explicación

El formato de guardado predeterminado de Inkscape es "Inkscape SVG", que es un archivo SVG normal que cumple con el estándar SVG 1.1, junto con metadatos e información adicional utilizada por Inkscape en el espacio de inkscapenombres.

Eso es SVG perfectamente válido, y la mayoría de los programas de renderizado, como los navegadores, no tienen problemas con él. Parece que su flujo de trabajo para la transformación de SVG a VectorDrawable XML se está bloqueando en ese código específico de Inkscape (aunque <defs>es un SVG vainilla válido).

Guardar como "SVG simple" elimina todos esos datos adicionales y cualquier característica que no esté en el estándar SVG. Esto resultará en una mejor compatibilidad con otros programas (como el suyo), pero puede perder alguna información, dependiendo del dibujo.

Características a evitar

Con mucho, la función SVG no estándar más común que la gente usa es un flujo de texto. Estos se crean arrastrando para crear un cuadro de texto (en lugar de simplemente hacer clic). El ajuste de texto no es compatible con SVG; muchos programas simplemente ignorarán el texto.

En el menú Texto , hay una opción en Inkscape para convertir un flujo de texto en un objeto de texto SVG normal.

En la mayoría de los casos, el elemento infractor se puede convertir simplemente en una ruta.

Ajuste de salida

Además de usar "SVG simple", hay algunas otras características para ajustar el árbol SVG en la salida de Inkscape.

  • En el menú Archivo , haga clic en Limpieza de documentos . Esto elimina las definiciones no utilizadas y otros metadatos.
  • En el menú Editar , haga clic en Preferencias . En la sección Entrada/Salida hay algunas opciones para cambiar el XML
Terminé convirtiendo un texto en una ruta usando Path , Object to Path . Trabajado como un encanto. Estoy usando Inkscape 0.92 y Android Studio 3.1.3.
Otra característica a evitar: Las mayúsculas en los extremos de las líneas (por ejemplo , puntas de flecha ), almacenadas en <marker>nodos.