-
Notifications
You must be signed in to change notification settings - Fork 160
Description
I'm trying to use the MorphButton to transition from one drawable to another. Both vc_startDrawable & vc_endDrawable use an animated-vector. The objectAnimator animates the trimPathStart property of a path vector. Everything's working fine on Android Lollipop but on kitkat or below, the app's crashing as soon as the activity with the MorphButton starts up. Since I'm using MorphButton, I'm not doing any inflation in java. I'm using buildToolsVersion '23.0.2' & minSdkVersion 14. Below is the necessary code:
<com.wnafee.vector.MorphButton
android:id="@+id/button"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@null"
app:vc_endDrawable="@drawable/anim_end"
app:vc_startDrawable="@drawable/anim_start" />
drawables anim_end and anim_start are similar to each other:
<animated-vector xmlns:android="http://schemas.android.com/apk/res/android"
android:drawable="@drawable/sample">
<target
android:name="b"
android:animation="@anim/anim_empty" />
<target
android:name="s"
android:animation="@anim/anim_fill" />
</animated-vector>
animators anim_fill and anim_empty are similar to each other:
<objectAnimator
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:propertyName="trimPathStart"
android:valueFrom="1"
android:valueTo="0"
android:duration="@integer/anim_duration"
android:interpolator="@android:interpolator/linear_out_slow_in"
android:valueType="floatType"
app:vc_valueType="floatType"/>
vector drawable sample is as follows:
<vector xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:width="250dp"
android:height="24dp"
android:viewportWidth="250"
android:viewportHeight="24"
app:vc_viewportWidth="250"
app:vc_viewportHeight="24">
<path
android:name="s"
android:pathData="@string/s_path"
android:strokeWidth="1"
android:strokeColor="@color/c1"
android:strokeAlpha="0.8"
android:strokeLineCap="round"
app:vc_pathData="@string/s_path"
app:vc_strokeWidth="1"
app:vc_strokeColor="@color/c1"
app:vc_strokeAlpha="0.8"
app:vc_strokeLineCap="round" />
<path
android:name="b"
android:pathData="@string/b_path"
android:strokeWidth="1"
android:strokeColor="@color/c1"
android:strokeAlpha="0.8"
android:strokeLineCap="square"
app:vc_pathData="@string/b_path"
app:vc_strokeWidth="1"
app:vc_strokeColor="@color/c1"
app:vc_strokeAlpha="0.8"
app:vc_strokeLineCap="square" />
</vector>
And finally here's the log report when the crash occurs:
-12 15:53:02.118 27342-27342/com.example E/AndroidRuntime﹕ FATAL EXCEPTION: main
Process: com.example, PID: 27342
android.view.InflateException: Binary XML file line #56: Error inflating class com.wnafee.vector.MorphButton
at android.view.LayoutInflater.createView(LayoutInflater.java:627)
at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:703)
at android.view.LayoutInflater.rInflate(LayoutInflater.java:762)
at android.view.LayoutInflater.rInflate(LayoutInflater.java:771)
at android.view.LayoutInflater.inflate(LayoutInflater.java:499)
at android.view.LayoutInflater.inflate(LayoutInflater.java:398)
at com.example.MyFragment.onCreateView(MyFragment.java:65)
at android.app.Fragment.performCreateView(Fragment.java:1700)
at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:890)
at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:1062)
at android.app.BackStackRecord.run(BackStackRecord.java:684)
at android.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1447)
at android.app.FragmentManagerImpl$1.run(FragmentManager.java:443)
at android.os.Handler.handleCallback(Handler.java:733)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:136)
at android.app.ActivityThread.main(ActivityThread.java:5433)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:515)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1268)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1084)
at dalvik.system.NativeStart.main(Native Method)
Caused by: java.lang.reflect.InvocationTargetException
at java.lang.reflect.Constructor.constructNative(Native Method)
at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
at android.view.LayoutInflater.createView(LayoutInflater.java:601)
at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:703)
at android.view.LayoutInflater.rInflate(LayoutInflater.java:762)
at android.view.LayoutInflater.rInflate(LayoutInflater.java:771)
at android.view.LayoutInflater.inflate(LayoutInflater.java:499)
at android.view.LayoutInflater.inflate(LayoutInflater.java:398)
at com.example.MyFragment.onCreateView(MyFragment.java:65)
at android.app.Fragment.performCreateView(Fragment.java:1700)
at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:890)
at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:1062)
at android.app.BackStackRecord.run(BackStackRecord.java:684)
at android.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1447)
at android.app.FragmentManagerImpl$1.run(FragmentManager.java:443)
at android.os.Handler.handleCallback(Handler.java:733)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:136)
at android.app.ActivityThread.main(ActivityThread.java:5433)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:515)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1268)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1084)
at dalvik.system.NativeStart.main(Native Method)
Caused by: android.content.res.Resources$NotFoundException: File res/drawable/anim_start.xml from drawable resource ID #0x7f02003c
at android.content.res.Resources.loadDrawable(Resources.java:3451)
at android.content.res.Resources.getDrawable(Resources.java:1894)
at com.wnafee.vector.compat.ResourcesCompat.getDrawable(ResourcesCompat.java:34)
at com.wnafee.vector.MorphButton.setStartDrawable(MorphButton.java:282)
at com.wnafee.vector.MorphButton.<init>(MorphButton.java:141)
at com.wnafee.vector.MorphButton.<init>(MorphButton.java:113)
at java.lang.reflect.Constructor.constructNative(Native Method)
at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
at android.view.LayoutInflater.createView(LayoutInflater.java:601)
at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:703)
at android.view.LayoutInflater.rInflate(LayoutInflater.java:762)
at android.view.LayoutInflater.rInflate(LayoutInflater.java:771)
at android.view.LayoutInflater.inflate(LayoutInflater.java:499)
at android.view.LayoutInflater.inflate(LayoutInflater.java:398)
at com.example.MyFragment.onCreateView(MyFragment.java:65)
at android.app.Fragment.performCreateView(Fragment.java:1700)
at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:890)
at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:1062)
at android.app.BackStackRecord.run(BackStackRecord.java:684)
at android.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1447)
at android.app.FragmentManagerImpl$1.run(FragmentManager.java:443)
at android.os.Handler.handleCallback(Handler.java:733)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:136)
at android.app.ActivityThread.main(ActivityThread.java:5433)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:515)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1268)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1084)
at dalvik.system.NativeStart.main(Native Method)
Caused by: org.xmlpull.v1.XmlPullParserException: Binary XML file line #2: invalid drawable tag animated-vector
at android.graphics.drawable.Drawable.createFromXmlInner(Drawable.java:969)
at android.graphics.drawable.Drawable.createFromXml(Drawable.java:913)
at android.content.res.Resources.loadDrawable(Resources.java:3447)
at android.content.res.Resources.getDrawable(Resources.java:1894)
at com.wnafee.vector.compat.ResourcesCompat.getDrawable(ResourcesCompat.java:34)
at com.wnafee.vector.MorphButton.setStartDrawable(MorphButton.java:282)
at com.wnafee.vector.MorphButton.<init>(MorphButton.java:141)
at com.wnafee.vector.MorphButton.<init>(MorphButton.java:113)
at java.lang.reflect.Constructor.constructNative(Native Method)
at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
at android.view.LayoutInflater.createView(LayoutInflater.java:601)
at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:703)
at android.view.LayoutInflater.rInflate(LayoutInflater.java:762)
at android.view.LayoutInflater.rInflate(LayoutInflater.java:771)
at android.view.LayoutInflater.inflate(LayoutInflater.java:499)
at android.view.LayoutInflater.inflate(LayoutInflater.java:398)
at com.example.MyFragment.onCreateView(MyFragment.java:65)
at android.app.Fragment.performCreateView(Fragment.java:1700)
at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:890)
at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:1062)
at android.app.BackStackRecord.run(BackStackRecord.java:684)
at android.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1447)
at android.app.FragmentManagerImpl$1.run(FragmentManager.java:443)
at android.os.Handler.handleCallback(Handler.java:733)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:136)
at android.app.ActivityThread.main(ActivityThread.java:5433)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:515)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1268)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1084)
at dalvik.system.NativeStart.main(Native Method)
Line 65 of MyFragment is:
View rootView = inflater.inflate(R.layout.fragment_layout, container, false);
I believe the problem is somewhere in the ResourcesCompat. It's somehow not using the library's own AnimatedVectorDrawable for inflation.
If any other info is needed, please let me know. Please guide me where I'm going wrong or suggest a workaround. I'm stuck here and very close to my deadline. Thanks.