我在
Android中有一个关于ObjectAnimator的问题.我试图模拟一个Bounce效果,其中View向上滑动(降低Y值)并在向后滑动相同数量的’n’,然后View再次向上和向下滑动,但这次是’n / 2′(所以一半的距离).
所以更大的反弹,然后是更浅的反弹 – 也就是说,当它需要你注意时,Mac图标在托盘中的作用.
这是我到目前为止所尝试的(假设v是一个视图):
float y = v.getTranslationY(),distance = 20F; AnimatorSet s = new AnimatorSet(); s.play(ObjectAnimator.ofFloat(v,"translationY",y- distance).setDuration(500)) .before(ObjectAnimator.ofFloat(v,y).setDuration(500)) .before(ObjectAnimator.ofFloat(v,y- (distance/2)).setDuration(500)) .before(ObjectAnimator.ofFloat(v,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的肮脏黑客之外,仍然没有重复.必须是一种更简单的方式,所以也许有人可以在知道其中时对其进行编辑.
无论如何,希望以上帮助某人.