Android - AnimatorSet,Object Animator - Bounce动画链是合并的吗?

Dar*_*ius 8 animation android

我有一个关于Android中ObjectAnimator的问题.我试图模拟一个Bounce效果,其中View向上滑动(降低Y值)并在向后滑动相同的量'n',然后View再次向上和向下滑动,但这次是'n/2'(所以一半的距离).

所以更大的反弹,然后是更浅的反弹 - 也就是说,当它需要你的注意时,Mac图标在托盘中做的事情.

这是我到目前为止所尝试的(假设v是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();
Run Code Online (Sandbox Code Playgroud)

忽略代码质量,这是一个POC!我希望这会起作用,但它似乎只是"反弹"一次,好像它结合了动画尽管使用了.before().

你能否告诉我如何创建复杂的AnimatorSet链,它们不会合并为一个,因为我似乎错过了一些东西?

奖励:对于额外的积分,我如何设置AnimatorSet的重复?

非常感谢!

Dar*_*ius 24

好的,所以我最终找到了一种相当简洁的方法,通过忽略流畅的构建器来实现顺序动画,并且只使用以下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();
Run Code Online (Sandbox Code Playgroud)

尽管如此,除了在侦听器中涉及回调onAnimationEnd的肮脏黑客之外,仍然没有重复.必须是一种更简单的方式,所以也许有人可以在知道一个时编辑它.

无论如何,希望以上帮助某人.

  • @MartinKonecny 这个问题仍然有很多观点,所以我想说我不再认为这是一个肮脏的黑客!要么是我对过去六年感到厌倦,要么是我刚刚获得了更多经验……或者两者兼而有之! (2认同)