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

2024-01-10

我有一个关于 Android 中的 ObjectAnimator 的问题。我正在尝试建模弹跳效果,其中视图向上滑动(减小 Y 值)并在相同量“n”后返回,然后视图再次上下滑动,但这次滑动“n/2”(因此距离的一半)。

因此,先是较大的弹跳,然后是较浅的弹跳 - 即,当 Mac 图标想要引起您的注意时,它会在托盘中执行此操作。

这是我到目前为止所尝试过的(假设v is a 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 链,这些链不会合并为一个,因为我似乎遗漏了一些东西?

BONUS:为了获得额外的分数,我如何设置 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 的肮脏黑客之外,仍然没有解决重复问题。一定是一种更简单的方法,所以也许有人知道时可以编辑它。

无论如何,希望以上内容对某人有所帮助。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Android - AnimatorSet、Object Animator - Bounce 动画链正在合并? 的相关文章

随机推荐