gpt4 book ai didi

android - AnimatedVectorDrawableCompat 使用回调的循环动画

转载 作者:太空狗 更新时间:2023-10-29 16:26:48 25 4
gpt4 key购买 nike

我正在尝试使用 AnimatedVectorDrawableCompat 在我的 Android 应用程序中实现动画,以实现 API >= 21 的兼容性。

我希望动画在 Activity 期间循环播放。我可以播放动画,它也可以在 API >= 25 上正常循环。但是当我在 API 21 到 24 的设备或模拟器上运行它时,我只看到动画一次。如果我在回调方法中设置断点,我会看到它也会执行回调,但动画不会重复。

我发现动画在不同的线程上运行,因为它不会阻塞 UI。

这是方法:

@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 .

是否有一些(最好是非 hacky :) )方法可以在这些 API 级别上一致地工作?这是一个错误吗?我错过了什么吗?

最佳答案

据我所知,这是系统版本和兼容版本之间的细微差别。 Compat 似乎在其动画被标记为已结束之前调用回调。所以对 start() 的调用被忽略了,因为它认为它还没有结束。

解决方案是通常的 hack:发布一个 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);
}
};

关于android - AnimatedVectorDrawableCompat 使用回调的循环动画,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48297753/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com