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

如何在Android中无限期重复多个动画,android,animation,Android,Animation,我有以下代码 Iterator imagesIterator = mImages.iterator(); while (arrowsIterator.hasNext()) { ImageView image = (ImageView) imagesIterator.next(); TranslateAnimation anim = new TranslateAnimation( TranslateAnimation.ABSOLUTE, 0f, Tra

我有以下代码

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);
}
我的想法是,我希望设置所有图像从屏幕顶部“落下”,然后无限重复(从上到下)

我现在遇到的问题是,似乎要等到所有的图像都完成动画之后,才能再次重复它们


我不希望这样,我希望它们在每一张图像到达底部时都能重复,这样看起来就像是一个无限的图像级联循环从屏幕顶部落下。

我认为你天真地认为,只要到达
image.startAnimation(anim)
,动画就开始了

事实上,您的循环终止,然后在主循环器上发布消息,然后启动动画。它们将同时运行,因为您没有另外指定

您可以做的是为循环中的每个动画提供初始延迟

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

是的,事实上我想让他们立刻开始。但它们同时也在结束。我发现错误配置的是平移偏移。如果我从-1.0f设置到1.0f,并在你写的时候给它一个延迟,我会得到想要的行为,而不是完全,就像在perferct世界中一样,我希望图像在完全从屏幕底部离开屏幕时,再次从屏幕顶部开始。这就是我所说的模拟级联的无限循环。对于级联效果,你必须为所有动画设置不同的持续时间和不同的偏移量。