我有一个关于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的肮脏黑客之外,仍然没有重复.必须是一种更简单的方式,所以也许有人可以在知道一个时编辑它.
无论如何,希望以上帮助某人.
归档时间: |
|
查看次数: |
17563 次 |
最近记录: |