棉花糖上可绘制的不同动画矢量(变形器动画,涉及androidx)
我的动画代码崩溃了。这是从xml创建的动画:棉花糖上可绘制的不同动画矢量(变形器动画,涉及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
<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
创建非androidxAnimatedVectorDrawable
,而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)
}