gpt4 book ai didi

Android - AnimatorSet、Object Animator - 弹跳动画链正在合并?

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:08:16 26 4
gpt4 key购买 nike

我有一个关于 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/

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