为什么地图标记ObjectAnimators会被取消?

时间:2017-10-19 15:26:27

标签: android google-maps google-maps-markers google-maps-android-api-2

我使用ObjectAnimators将应用程序添加到屏幕后,动画应用于地图标记。动画用逐渐变大或变小的位图替换图标。大约20%的时间,它将随机取消动画,只留下部分放大或缩小。我知道它被取消了因为a)动画没有完成,b)如果我添加AnimatorListener,那么在这些时间调用onAnimationCancel()

它似乎与垃圾收集,与其他引脚无关(当屏幕上只放置一个引脚时可能发生),与动画正在进行中运行的其他代码有关。

它们未设置为autoCancel,即使它们是,它也不会被触发,因为没有启动多个相同的动画。

任何想法都会发生这种情况?有没有人见过动画被随意和意外取消?

1 个答案:

答案 0 :(得分:0)

好吧,我觉得自己像个白痴 - 我终于意识到为什么会发生这种情况!

ObjectAnimators只对其目标对象有弱引用。

如果你没有在一些其他变量中保持对动画对象的单独引用,那么有时它会在动画结束之前被垃圾收集。 ObjectAnimator的下一次迭代将尝试更新对象,因为目标对象为null而失败,然后它将取消动画。

然后,解决方案只是确保您有一个引用该对象的变量,至少在动画完成之前。

希望这有帮助 - 我确信我不能成为唯一遇到此问题的人!