我有一个关于 Android 中的 ObjectAnimator 的问题。我正在尝试模拟一个弹跳效果,其中 View 向上滑动(减小 Y 值)并在相同数量“n”之后返回,然后 View 再次向上和向下滑动,但这次是“n/2”(所以距离的一半)。
所以弹跳幅度更大,然后弹跳幅度更小 - 即,当 Mac 图标需要您注意时,它会在托盘中执行类似的操作。
这是我到目前为止尝试过的(假设 v
是一个 View
):
float y = v.getTranslationY(),distance = 20F;
AnimatorSet s = new AnimatorSet();
s.play(ObjectAnimator.ofFloat(v, "translationY", y- distance).setDuration(500))
.before(ObjectAnimator.ofFloat(v, "translationY", y).setDuration(500))
.before(ObjectAnimator.ofFloat(v, "translationY", y- (distance/2)).setDuration(500))
.before(ObjectAnimator.ofFloat(v, "translationY", y).setDuration(500));
s.start();
忽略代码质量,这是一个 POC!我希望这会奏效,但它似乎只“弹跳”一次,就好像它结合了动画,尽管使用了 .before()
。
你能告诉我如何创建复杂的 AnimatorSet 链,这些链不会合并为一个,因为我似乎遗漏了什么?
奖励:为了加分,如何设置 AnimatorSet 的重复?
非常感谢!
最佳答案
好吧,所以我最终找到了一种相当简洁的方法来实现顺序动画,方法是忽略流畅的构建器,只使用 playSequentially()
方法,这样:
AnimatorSet as = new AnimatorSet();
as.playSequentially(ObjectAnimator.ofFloat(...), // anim 1
ObjectAnimator.ofFloat(...), // anim 2
ObjectAnimator.ofFloat(...), // anim 3
ObjectAnimator.ofFloat(...)); // anim 4
as.setDuration(600);
as.start();
不过,除了在监听器中涉及回调 onAnimationEnd 的肮脏 hack 之外,仍然没有解决重复问题。必须是一种更简单的方法,所以也许有人知道后可以编辑它。
无论如何,希望以上内容对某人有所帮助。
关于Android - AnimatorSet、Object Animator - 弹跳动画链正在合并?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13426052/