AnimatedVectorDrawable或AnimatedVectorDrawableCompat都在不同的api级别崩溃

时间:2018-02-07 09:58:50

标签: android

此代码适用于Lollipop:

drawable = AppCompatResources.getDrawable(this, R.drawable.list_2_map_animated_vector_drawable)!!
(drawable as AnimatedVectorDrawableCompat).start()

但是在Oreo上它崩溃了这个例外:

Process: com.tractrac.otrack.debug, PID: 23424
java.lang.ClassCastException: android.graphics.drawable.AnimatedVectorDrawable cannot be cast to android.support.graphics.drawable.AnimatedVectorDrawableCompat
    at com.myprettyapp.main.MainActivity$onCreate$6.onClick(MainActivity.kt:177)
    at android.view.View.performClick(View.java:6303)
    at android.view.View$PerformClick.run(View.java:24828)
    at android.os.Handler.handleCallback(Handler.java:789)
    at android.os.Handler.dispatchMessage(Handler.java:98)
    at android.os.Looper.loop(Looper.java:164)
    at android.app.ActivityThread.main(ActivityThread.java:6809)
    at java.lang.reflect.Method.invoke(Native Method)
    at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:240)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:767)

更改为(drawable as AnimatedVectorDrawable)使其在Oreo上正常工作但在Lollipop中完全相同但是相反。

我认为AnimatedVectorDrawableCompat对两者都有效。

我该如何解决这个问题?

1 个答案:

答案 0 :(得分:1)

对于API 24及更高版本,此类委托给框架的AnimatedVectorDrawable。对于较旧的API版本,此类使用ObjectAnimator和AnimatorSet为VectorDrawableCompat的属性设置动画,以创建动画drawable。