I wanted to make an AnimatedVectorDrawable, so that my FAB can look atleast somewhat as fabulous as this one, with animations and stuff.
I found this great tutorial, on how to use & implement them etc, and later on I found a very usefull tool for converting SVG's into Android-VectorDrawables, and converted these two images: https://github.com/google/material-design-icons/blob/master/content/svg/design/ic_add_48px.svg https://github.com/google/material-design-icons/blob/master/action/svg/design/ic_done_48px.svg
Now this is the xml-"code" that I've come up with:
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>
If I run this code, I just end up with this 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
My guess would be that the two path's in the two svg's are too different, so Android cannot handle the animation on it's own, and I need to make like several VectorDrawables for each animation "checkpoint".
...I'm probably completly way off with that theory, but it's the most logical I can come up with..
I do not have much experience (nor any experince at all for that matter) working with Vectors & Illustrator etc, so any help you guys can come up with will be extremely appreciated.
Have a nice day, and Merry Christmas.
Sincerely, Måns.
If you want to morph between arbitrary SVG images (or VectorDrawable) you need to align the corresponding paths in order to make them compatible for morphing.
This is a very tedious task, but there's a command line tool that can do that for you: VectAling
You just need to run the VectAlign tool from the command line passing your original paths and it will automatically create "morphable" sequences.
Example of usage:
java -jar vectalign.jar --start "M 10,20..." --end "M 30,30..."
Output:
--------------------
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
Now you can use these new sequences in your Android project and morph between them as usual using an AnimatedVectorDrawable!
You can also pass SVG files:
java -jar vectalign.jar --start image1.svg --end image2.svg
This is one of the samples from the VectAlign demo:

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With