2017-02-14 48 views
-1

我有以下代碼。如何在Android中重複多個動畫Indefintly in Android

Iterator imagesIterator = mImages.iterator(); 
while (arrowsIterator.hasNext()) { 
    ImageView image = (ImageView) imagesIterator.next(); 

    TranslateAnimation anim = new TranslateAnimation(
     TranslateAnimation.ABSOLUTE, 0f, 
     TranslateAnimation.ABSOLUTE, 0f, 
     TranslateAnimation.RELATIVE_TO_PARENT, 0f, 
     TranslateAnimation.RELATIVE_TO_PARENT, 1.0f 
    ); 

    anim.setDuration(10000); 
    anim.setInterpolator(new LinearInterpolator()); 
    anim.setRepeatCount(Animation.INFINITE); 
    image.startAnimation(anim); 
} 

的想法是,我想要一個集合中的所有圖像,以「落」從屏幕頂部向下並重復無限(從上到下)。

我現在面臨的問題是,它似乎在等待,直到所有圖像都與他們的動畫完成一次重複所有圖像。

我不希望這樣,我希望它們在每個圖像到達底部時儘快重複,因此它看起來像是從屏幕頂部下來的無限級聯循環圖像。

希望我明確。謝謝!

回答

0

我想你天真地認爲只要image.startAnimation(anim)達到動畫開始。

實際上,您的循環終止,然後主消息發佈在主Looper上,然後您的動畫正在啓動。他們會同時運行,因爲你沒有另外指定。

你可以做什麼,是給你的循環中的每個動畫初始延遲。

Iterator imagesIterator = mImages.iterator(); 
long offset = 0; 
while (arrowsIterator.hasNext()) { 
    ImageView image = (ImageView) imagesIterator.next(); 

    TranslateAnimation anim = new TranslateAnimation(
      TranslateAnimation.ABSOLUTE, 0f, 
      TranslateAnimation.ABSOLUTE, 0f, 
      TranslateAnimation.RELATIVE_TO_PARENT, 0f, 
      TranslateAnimation.RELATIVE_TO_PARENT, 1.0f 
    ); 

    anim.setDuration(10000); 
    anim.setStartOffset(offset); 
    offset += 100; // each animation will be delayed by 100ms from the previous 
    anim.setInterpolator(new LinearInterpolator()); 
    anim.setRepeatCount(Animation.INFINITE); 
    image.startAnimation(anim); 
} 
+0

是的,實際上我想讓他們一下子開始。但他們也同時結束。我發現的是,錯誤配置的是翻譯偏移量。如果我從-1.0f設置爲1.0f,並按照你的寫法給它一個延遲,我會得到所需的行爲,不完全如在perferct世界中,我希望圖像從屏幕的頂部再次開始他們完全脫離了屏幕底層。這就是我用無限循環來模擬級聯的意思。 – martin

+0

對於這種級聯效應,您必須爲所有動畫設置不同的持續時間和不同的偏移量。 – azizbekian