如何在Android中无限重复多个动画

时间:2017-02-14 15:15:24

标签: android animation

我有以下代码。

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);
}

我的想法是,我希望将所有图像设置为" fall"从屏幕顶部向下并无限地重复(从上到下)。

我现在遇到的问题是它似乎在等待所有图像完成动画再次重复这些图像。

我不想要那个,我想让它们一旦每个图像到达底部就重复,所以它看起来像是从屏幕顶部掉下来的infinte级联循环图像。

希望我说清楚。谢谢!

1 个答案:

答案 0 :(得分: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);
}