Android 使用回调的AnimatedVectorDrawableCompat循环动画
我正在尝试使用AnimatedVectorDrawableCompat在我的Android应用程序中实现一个动画,以兼容API>=21 我希望动画在活动期间循环。我能够播放动画,并且它在API>=25上也可以很好地循环。但是,当我使用API21到24在设备或模拟器上运行它时,我只看到一次动画。如果在回调方法中设置断点,我会看到它也执行回调,但动画不会重复 我发现动画运行在不同的线程上,因为它不会阻塞UI 方法如下:Android 使用回调的AnimatedVectorDrawableCompat循环动画,android,animation,android-animation,animatedvectordrawable,Android,Animation,Android Animation,Animatedvectordrawable,我正在尝试使用AnimatedVectorDrawableCompat在我的Android应用程序中实现一个动画,以兼容API>=21 我希望动画在活动期间循环。我能够播放动画,并且它在API>=25上也可以很好地循环。但是,当我使用API21到24在设备或模拟器上运行它时,我只看到一次动画。如果在回调方法中设置断点,我会看到它也执行回调,但动画不会重复 我发现动画运行在不同的线程上,因为它不会阻塞UI 方法如下: @Override protected void onCreate(Bundle
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
imageView = findViewById(R.id.image_view1);
final AnimatedVectorDrawableCompat anim = AnimatedVectorDrawableCompat.create(this, R.drawable.avd_pass_inside);
imageView.setImageDrawable(anim);
anim.registerAnimationCallback(new Animatable2Compat.AnimationCallback() {
@Override
public void onAnimationEnd(Drawable drawable) {
anim.start();
}
});
anim.start();
}
从我所读到的,使用Compat库应该可以使它适用于14级及以上的所有API级别,但我甚至不必去那里,因为我的应用程序的其余部分的要求是最低21级
是否有一些(最好是非黑客的:)方法可以使这项工作在这些API级别上保持一致?是虫子吗?我错过了什么吗?据我所知,这是系统和兼容版本之间的细微差别。Compat似乎在其动画被标记为已结束之前调用回调。因此,对
start()
的调用被忽略,因为它认为它还没有结束
解决方案是通常的黑客:发布一个Runnable
,在动画完成后启动它
new Animatable2Compat.AnimationCallback() {
@NonNull
private final Handler fHandler = new Handler(Looper.getMainLooper());
@Override
public void onAnimationEnd(@NonNull Drawable drawable) {
Animatable2Compat avd = (Animatable2Compat) drawable;
fHandler.post(avd::start);
}
};
一句话也没有?风滚草