Skip to content

MorphButton with animate-vector as drawable not inflating in kitkat or below. #32

@anjanibansal

Description

@anjanibansal

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.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions