棉花糖上可绘制的不同动画矢量(变形器动画,涉及androidx)

棉花糖上可绘制的不同动画矢量(变形器动画,涉及androidx),android,android-animation,android-vectordrawable,Android,Android Animation,Android Vectordrawable,我的动画代码崩溃了。这是从xml创建的动画: <animated-vector xmlns:android="http://schemas.android.com/apk/res/android" xmlns:aapt="http://schemas.android.com/aapt"> //not relevant </animated-vector> 崩溃发生在第行AnimatedVectorDrawableCompat.registerAn

我的动画代码崩溃了。这是从xml创建的动画:

<animated-vector
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:aapt="http://schemas.android.com/aapt">
    //not relevant
</animated-vector>
崩溃发生在第
行AnimatedVectorDrawableCompat.registerAnimationCallback(animationDrawable,callback)
上,原因如下:

android.graphics.drawable.AnimatedVectorDrawable cannot be cast to androidx.vectordrawable.graphics.drawable.AnimatedVectorDrawableCompat
Android 6上的getDrawable类似于
ContextCompat.getDrawable
创建非androidx
AnimatedVectorDrawable
,而
AnimatedVectorDrawableCompat.registerAnimationCallback
需要androidx 1并崩溃。查看内部
AnimatedVectorDrawableCompat
时,它变得很明显:

public static void registerAnimationCallback(Drawable dr,
        Animatable2Compat.AnimationCallback callback) {
    if (dr == null || callback == null) {
        return;
    }
    if (!(dr instanceof Animatable)) {
        return;
    }

    if (Build.VERSION.SDK_INT >= 24) {
        registerPlatformCallback((AnimatedVectorDrawable) dr, callback);
    } else {
        ((AnimatedVectorDrawableCompat) dr).registerAnimationCallback(callback);
    }
} 

在我看来,有人知道这个吗?有没有一种方法可以适用于从5开始的所有版本?

这很糟糕,但如果我像这样从xml加载drawable,它显然是有效的:

val animationDrawable = return if (Build.VERSION.SDK_INT >= 24) {
        ContextCompat.getDrawable(this, R.drawable.anim_logbook_register_measurement)
    } else {
        AnimatedVectorDrawableCompat.create(this, R.drawable.anim_logbook_register_measurement)
    }

如果(Build.VERSION.SDK_INT>=24),则使用此if语句如果设备是某个verison,你可以运行你的动画代码,如果它比某个版本小,你可以运行旧版本的动画代码…你只需要为旧版本的sdksI编写第二行动画代码,但找不到等效的RegisterImationCallback。这可能有助于在较旧的设备上制作动画,这一点也一样
val animationDrawable = return if (Build.VERSION.SDK_INT >= 24) {
        ContextCompat.getDrawable(this, R.drawable.anim_logbook_register_measurement)
    } else {
        AnimatedVectorDrawableCompat.create(this, R.drawable.anim_logbook_register_measurement)
    }