首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

在API < 19上的valueanimator.cancel之后,valueanimator.start正在重新启动动画

在API < 19上,调用ValueAnimator.cancel()方法会取消正在运行的动画,并将动画的属性值重置为初始值。然而,在取消动画后,调用ValueAnimator.start()方法重新启动动画可能会导致动画无法正常运行。

这是因为在API < 19上,ValueAnimator类的实现方式不同于后续版本。在这些旧版本中,ValueAnimator使用Handler来处理动画更新和回调,而cancel()方法会将Handler的消息队列中的动画消息移除,以取消动画。然而,由于Handler的消息队列是先进先出的,因此在取消动画后立即重新启动动画,可能会导致取消的消息仍然存在于消息队列中,从而导致动画无法正常启动。

为了解决这个问题,可以在重新启动动画之前添加一个延迟,以确保取消的消息已经被处理完毕。可以使用HandlerpostDelayed()方法来实现延迟启动动画。示例代码如下:

代码语言:java
复制
ValueAnimator animator = ValueAnimator.ofFloat(0f, 1f);
animator.setDuration(1000);

// 取消动画
animator.cancel();

// 延迟启动动画
new Handler().postDelayed(new Runnable() {
    @Override
    public void run() {
        animator.start();
    }
}, 100);

在上述代码中,我们使用HandlerpostDelayed()方法将启动动画的代码延迟100毫秒执行,以确保取消的消息已经被处理完毕。这样就可以避免动画无法正常启动的问题。

需要注意的是,上述解决方案仅适用于API < 19的情况。在API >= 19的版本中,ValueAnimator.cancel()ValueAnimator.start()方法的行为已经修复,可以正常使用,无需添加延迟。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

领券