为什么我的地图标记 ObjectAnimators 被取消了?

Why are my map marker ObjectAnimators getting canceled?

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

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

它们没有设置为自动取消,即使设置了,也不会被触发,因为没有启动多个相同的动画。

知道为什么会这样吗?有没有人见过动画被意外地随机取消?

好吧,我觉得自己像个白痴——我终于明白为什么会这样了!

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

如果您不在其他变量中维护对动画对象的单独引用,那么有时它会在动画完成之前被垃圾回收。 ObjectAnimator 的下一次迭代将尝试更新对象,由于目标对象为空而失败,然后它将取消动画。

那么,解决方案就是确保您有一个引用该对象的变量,至少在动画完成之前是这样。

希望这对您有所帮助——我敢肯定我不会是唯一 运行 这个问题的人!