wnafee / vector-compat

A support library for VectorDrawable and AnimatedVectorDrawable classes introduced in Lollipop
1.23k stars 161 forks source link

clicking MorphButton throws NPE #25

Open sewerk opened 9 years ago

sewerk commented 9 years ago

verision: 1.0.5 layout:

<com.wnafee.vector.MorphButton
            android:layout_marginRight="8dp"
            android:layout_marginTop="16dp"
            android:layout_width="24dp"
            android:layout_marginLeft="8dp"
            android:layout_marginBottom="16dp"
            android:layout_height="24dp"
            app:vc_startDrawable="@drawable/ic_history_black_24px" />

on click throws: java.lang.NullPointerException: Attempt to invoke virtual method 'android.graphics.Rect android.graphics.drawable.Drawable.getBounds()' on a null object reference at com.wnafee.vector.MorphButton.setCurrentDrawable(MorphButton.java:336) at com.wnafee.vector.MorphButton.setState(MorphButton.java:381) at com.wnafee.vector.MorphButton.toggle(MorphButton.java:173) at android.widget.CompoundButton.performClick(CompoundButton.java:127) at android.view.View$PerformClick.run(View.java:20926) at android.os.Handler.handleCallback(Handler.java:739) at android.os.Handler.dispatchMessage(Handler.java:95) at android.os.Looper.loop(Looper.java:145) at android.app.ActivityThread.main(ActivityThread.java:5944) at java.lang.reflect.Method.invoke(Native Method) at java.lang.reflect.Method.invoke(Method.java:372) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1389) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1184)

elenabratanova commented 8 years ago

Maybe the cause is that you have only app:vc_startDrawable set, but no endDrawable?

sewerk commented 8 years ago

What is the right way to show vector drawable without any morph animation? Should I use

app:vc_startDrawable="@drawable/ic_history_black_24px" app:vc_endDrawable="@drawable/ic_history_black_24px"/> ?

elenabratanova commented 8 years ago

@sewerk if you simply want a button with a vector, I would do something like this (I'm no expert, so maybe there is a better way, but I just checked and it works):

button.setBackground(VectorDrawable.create(getResources(), R.drawable.ic_arrow_vector));

where button is a standard Button; so there is no need to use a MorphButton.

sewerk commented 8 years ago

I don't like the idea of declaring UI inside Java code when I don't need to. As I understand properly the MorphButton was design to fulfil also that requirements.