2012-11-16 30 views
6

我有一個關於Android中的ObjectAnimator的問題。我試圖模擬一個彈跳效果,使View向上滑動(減小Y值),然後向後滑動相同的量'n',接着View再次上下滑動,但這次是'n/2'(so距離的一半)。Android - AnimatorSet,Object Animator - 反彈動畫鏈合併?

所以一個更大的反彈,然後是更淺的反彈 - 也就是說,Mac圖標在托盤中的作用,當它需要你的注意。

這是我到目前爲止已經試過(假設vView):

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的重複次數?

非常感謝!

回答

16

行,所以我最終找到了一個相當簡潔的方式通過忽略流利的建設者,並只使用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的回調。必須是一個更簡單的方法,所以也許有人可以編輯這個,當他們知道一個。

無論如何,希望以上幫助某人。

+0

使用http://www.jefflinwood.com/2013/04/repeating-android-animations-with-animatorset/如果您想重複 –

+0

「涉及回調onAnimationEnd在監聽器中的骯髒的黑客攻擊」 - 看起來文章描述了相同的方法 – ComethTheNerd

+0

哦,我誤解了你的評論。但是,動畫結束的精確時刻的回調不會被視爲骯髒的黑客IMO。 –