使用相同的动画

时间:2017-04-11 23:12:43

标签: java android animation android-animation objectanimator

我有一个简单的动画文件:

<set xmlns:android="http://schemas.android.com/apk/res/android"
android:interpolator="@android:anim/accelerate_decelerate_interpolator"
android:ordering="sequentially" >
<objectAnimator
    android:duration="1000"
    android:propertyName="x"
    android:repeatCount="1"
    android:repeatMode="reverse"
    android:valueTo="-50"
    android:valueType="floatType" />

基本上这需要一个组件并沿X轴向左滑动50dp。我已成功将其附加到ONE组件,并且它可以完美地工作,但是当我尝试将其同时附加到多个组件时,动画仅适用于最终组件。

例如: 我有5张牌。 AI敌人从它手中挑选一张随机牌。但我想让敌人“挑选”卡片。这就是动画发挥作用的地方。

这样的事情

AnimatorSet cardSet = (AnimatorSet) AnimatorInflater.loadAnimator(this, R.animator.pick_card);

for(int i=0; i<enemyCards.size(); i++){
   cardSet.setTarget(enemyCards.get(i));
   cardSet.start();    
}

这里的目标是循环遍历阵列中的每张卡并将其在X轴上滑出。但动画只出现在最终卡片(阵列中的第5张卡片)

另外这是因为原因很大,人们不再阅读大段落,有人不断编辑我的格式) - 我希望每个段落都有延迟卡片滑出的时间。所以循环应该是这样的:

loop{
    animate card 1
    delay
}

OR

动画文件应该是

android:delay="100"

我一直在努力,但收效甚微

2 个答案:

答案 0 :(得分:1)

您可以在某个视图组中收集视图,而不是仅为父视图设置动画,以便为所有子视图设置动画效果?

答案 1 :(得分:1)

这是用文本编辑器编写的草图代码,它可能有语法错误,但你会得到这个概念:

AnimatorSet cardSet = (AnimatorSet) AnimatorInflater.loadAnimator(this, R.anim.pick_card);

List<AnimatorSet> animators = new ArrayList<>(enemyCards.size());

for (int i = 0, size = animators.size(); i < size; ++i) {
    animators.add(cardSet.clone());
}

final int step = 100;
int delay = 0;

for (int i = 0, size = enemyCards.size(); i < size; ++i) {
    AnimatorSet set = animators.get(i);
    set.setTarget(enemyCards.get(i));
    set.setStartDelay(delay);
    delay += step;
    set.start();    
}