Error al intentar probar AnimatedVectorDrawable, "No se puede cambiar de x a z"
Quería hacer un AnimatedVectorDrawable, por lo que mi FAB puede mirar un poco tan fabuloso como este , con animaciones y cosas.
He encontrado este gran tutorial , sobre cómo usar y poner en práctica etc, y más tarde encontré una herramienta muy útil para convertir SVG en Android-VectorDrawables, y convirtió estas dos imágenes: https://github.com/google/material- Diseño-iconos / blob / master / content / svg / diseño / ic_add_48px.svg https://github.com/google/material-design-icons/blob/master/action/svg/design/ic_done_48px.svg
- Conjunto de atributos, obtener enumeración por nombre
- Cómo analizar el valor en el atributo en el análisis xml
- Cómo cambiar la casilla de verificación (marcar casilla) color a blanco en android XML
- cómo crear un xml utilizando xmlserializer en la aplicación android
- El botón recortado no recibe la entrada táctil
Ahora este es el xml- "código" que he creado:
Drawable / vector_add.xml:
<?xml version="1.0" encoding="utf-8"?> <vector xmlns:android="http://schemas.android.com/apk/res/android" android:width="24dp" android:height="24dp" android:viewportWidth="48" android:viewportHeight="48"> <group> <path android:pathData="M0 0h48v48h-48Z" /> <path android:name="add" android:fillColor="#ffffff" android:pathData="M38 26h-12v12h-4v-12h-12v-4h12v-12h4v12h12v7Z" /> </group> </vector>
Anim / add_to_done.xml:
<?xml version="1.0" encoding="utf-8"?> <set xmlns:android="http://schemas.android.com/apk/res/android"> <objectAnimator android:duration="3000" android:propertyName="pathData" android:valueFrom="M38 26h-12v12h-4v-12h-12v-4h12v-12h4v12h12v7Z" android:valueTo="M18 32.34l-8.34-8.34-2.83 2.83 11.17 11.17 24-24-2.83-2.83Z" android:valueType="pathType" /> </set>
Drawable / ic_add.xml:
<?xml version="1.0" encoding="utf-8"?> <animated-vector xmlns:android="http://schemas.android.com/apk/res/android" android:drawable="@drawable/vector_add"> <target android:name="add" android:animation="@anim/anim_plus_to_done" /> </animated-vector>
Si ejecuto este código, acabo con este error:
Caused by: android.view.InflateException: Binary XML file line #3 Can't morph from M38 26h-12v12h-4v-12h-12v-4h12v-12h4v12h12v4Z to M18 32.34l-8.34-8.34-2.83 2.83 11.17 11.17 24-24-2.83-2.83Z at android.animation.AnimatorInflater.setupAnimatorForPath(AnimatorInflater.java:337) at android.animation.AnimatorInflater.parseAnimatorFromTypeArray(AnimatorInflater.java:283) at android.animation.AnimatorInflater.loadAnimator(AnimatorInflater.java:618) at android.animation.AnimatorInflater.loadObjectAnimator(AnimatorInflater.java:577) at android.animation.AnimatorInflater.createAnimatorFromXml(AnimatorInflater.java:529) at android.animation.AnimatorInflater.createAnimatorFromXml(AnimatorInflater.java:542
Mi conjetura sería que los dos caminos en los dos svg son demasiado diferentes, por lo que Android no puede manejar la animación por sí mismo, y tengo que hacer como varios VectorDrawables para cada animación "punto de control".
… Estoy probablemente completamente lejos con esa teoría, pero es lo más lógico que puedo llegar a.
No tengo mucha experiencia (ni ningún experince en absoluto para esa materia) que trabaja con los vectores y el ilustrador etc, así que cualquier ayuda que los individuos pueden subir con serán extremadamente apreciados.
Que tengas un buen día, y Feliz Navidad.
Sinceramente, Måns.
- ¿Cómo evitar las filtraciones de Eclipse en XServer al editar archivos XML de Android?
- Fondo transparente en ImageButton con efecto de ondulación?
- No se encontró ningún identificador de recurso para el atributo 'layout_behavior' en el paquete
- Cómo cambiar la dirección de la sombra de elevación de Android?
- El contenido de los elementos debe consistir en datos de caracteres bien formados o marcado. AndroidManifest.xml
- Error al analizar XML: prefijo no enlazado en la biblioteca
- Los colores de Android no funcionan en mi dispositivo físico
- Abrir archivo XML desde res / xml en Android
Los VectorDrawables que desea transformar deben ser compatibles, lo que significa que deben tener complejidades simlar; Longitud y número de comandos similares (esto fue mencionado por pksink).
De esta manera terminé resolviendo esto es tomar el símbolo "plus" y modificar las dimensiones manualmente en android studio hasta que tuviera algo parecido a una marca de verificación.
Vector Plus:
<?xml version="1.0" encoding="utf-8"?> <vector xmlns:android="http://schemas.android.com/apk/res/android" android:viewportHeight="24" android:viewportWidth="24" android:width="24dp" android:height="24dp"> <group android:name="plus_group" android:pivotX="12" android:pivotY="12"> <path android:name="plus_path" android:strokeColor="@android:color/white" android:strokeWidth="3" android:pathData="M12,0L12,24M0,12,L24,12" /> </group> </vector>
Vector de CheckMark:
<?xml version="1.0" encoding="utf-8"?> <vector xmlns:android="http://schemas.android.com/apk/res/android" android:viewportWidth="24" android:viewportHeight="24" android:width="24dp" android:height="24dp"> <group android:name="check_group" android:pivotX="12" android:translateX="0" android:pivotY="12"> <path android:name="check_path" android:strokeColor="@android:color/white" android:strokeWidth="3" android:pathData="M20,0L06,20M0,14,L08,19" /> </group> </vector>
Observe que estos tienen el mismo número de comandos. La marca de verificación no parece perfecta, pero no se puede notar si la pone en un botón de acción flotante.
Sugerencia adicional: Mueve el pathData a una variable de cadena. De esta forma, es más fácil mantener la consistencia en sus objectAnimators.
Si desea transformarse entre imágenes SVG arbitrarias (o VectorDrawable
) es necesario alinear las rutas correspondientes para que sean compatibles con el morphing . Esta es una tarea muy tediosa, pero hay una herramienta de línea de comandos que puede hacer eso por usted: VectAling
Sólo tienes que ejecutar la herramienta VectAlign desde la línea de comandos pasando tus rutas originales y creará automáticamente secuencias "morphables".
Ejemplo de uso:
java -jar vectalign.jar --start "M 10,20..." --end "M 30,30..."
Salida:
-------------------- ALIGNMENT RESULT -------------------- # new START sequence: M 48.0,54.0 L 31.0,42.0 L 15.0,54.0 L 21.0,35.0 L 6.0,23.0 L 25.0,23.0 L 25.0,23.0 L 25.0,23.0 L 25.0,23.0 L 32.0,4.0 L 40.0,23.0 L 58.0,23.0 L 42.0,35.0 L 48.0,54.0 # new END sequence: M 48.0,54.0 L 48.0,54.0 L 48.0,54.0 L 48.0,54.0 L 31.0,54.0 L 15.0,54.0 L 10.0,35.0 L 6.0,23.0 L 25.0,10.0 L 32.0,4.0 L 40.0,10.0 L 58.0,23.0 L 54.0,35.0 L 48.0,54.0
Ahora puede utilizar estas nuevas secuencias en su proyecto de Android y morph entre ellos como de costumbre con un AnimatedVectorDrawable
!
También puede pasar archivos SVG :
java -jar vectalign.jar --start image1.svg --end image2.svg
Esta es una de las muestras de la demo de VectAlign :