在Android上为一个ImageView添加多个动画

24

我有两个已经在工作的动画,我想同时淡出我的火车和在同一时间内使我的火车发生Tween动画。如果我只执行其中一个命令,它能够正常工作。但是如果我尝试同时执行这两个命令,只有其中一个会起作用。 我真的找不到解决方法。

也许你能帮忙吗?

  final ImageView mytrain = (ImageView) findViewById(R.id.train);
  final Animation traintween = AnimationUtils.loadAnimation(this,R.anim.treinanimation);
   final Animation trainfade = AnimationUtils.loadAnimation(this,R.anim.trainfade);


  mytrain.startAnimation(trainfade);
 mytrain.startAnimation(trainntween);

我希望我的列车执行这两个动画。

感谢您的帮助!

5个回答

68
使用AnimationSet类:
AnimationSet s = new AnimationSet(false);//false means don't share interpolators
s.addAnimation(traintween);
s.addAnimation(trainfad);
mytrain.startAnimation(s);

AnimationSet 中没有 addAnimation() 方法。 - Konstantin Konopko
2
@konopko 是的,有的。自API级别1以来。http://developer.android.com/reference/android/view/animation/AnimationSet.html#addAnimation(android.view.animation.Animation) - Chad Bingham
View.startAnimation(AnimationSet) 不可行。为什么这是一个被接受的答案? - Hemanth
AnimationSet继承自Animation,因此startAnimation(Animation)也可以与AnimationSet一起使用。 - Arreis

4
可以使用Android的AnimatorSet类编程实现:
final AnimatorSet mAnimatorSet = new AnimatorSet();
    mAnimatorSet.playTogether(
                ObjectAnimator.ofFloat(img_view,"scaleX",1,0.9f,0.9f,1.1f,1.1f,1),
                ObjectAnimator.ofFloat(img_view,"scaleY",1,0.9f,0.9f,1.1f,1.1f,1),
                ObjectAnimator.ofFloat(img_view,"rotation",0 ,-3 , -3, 3, -3, 3, -3,3,-3,3,-3,0)
        );

//define any animation you want,like above

mAnimatorSet.setDuration(2000); //set duration for animations
    mAnimatorSet.start();

这个例子将同时启动目标视图(imgView)上的所有3个动画,你也可以使用playSequentially...。
完整的示例请查看这里

4

您需要使用一个AnimationSet,请参考文档。只需为每个要播放的动画调用addAnimation()即可。


1
addAnimation(trainfade); addAnimation(traintween);public void addAnimation(Animation a) { mytrain.startanimation(a); }是这样的吗? - RobinHo

1

这是一个包含所有动画的示例xml文件...

这会对你有所帮助,但首先你应该阅读AnimationSet的文档。

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">

<scale android:fromXScale="1.0" android:toXScale="3.0"
    android:fromYScale="1.0" android:toYScale="3.0" android:pivotX="50%"
    android:pivotY="50%"  android:duration="5000" />
<set>
    <alpha xmlns:android="http://schemas.android.com/apk/res/android"
        android:fromAlpha="0.2" android:toAlpha="1.0"     android:duration="3000" />
    <rotate android:fromDegrees="0" android:toDegrees="-360"
        android:toYScale="0.0" android:pivotX="50%" android:pivotY="50%"
        android:startOffset="700" android:duration="4000" />
<!--        <translate android:fromXDelta="0%" android:toXDelta="0%" -->
<!--            android:fromYDelta="0%" android:toYDelta="100%"     android:duration="3000" -->
</set>

</set>

重要的是考虑使用插值器来处理命名空间上的同时动画。 - DarkCygnus

0

你也可以使用ImageSwitcher,我认为在你的情况下这比AnimationSet更好。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接