以编程方式在Android视图上设置两个动画

7

我使用这段代码来制作缩放动画

Animation anim = new ScaleAnimation(1f, 0f, 1f, 0f, b, a);
anim.setDuration(130);
anim.setFillAfter(false);
view.startAnimation(anim);   
anim.start(); 

现在我的视图动画没有问题,但当我向其添加另一个动画时,它不会使任何一个动画进行。以下是我制作两个动画的代码,分别为缩放和平移:

Animation anim = new ScaleAnimation(1f, 0f, 1f, 0f, b, a);
Animation animT = new TranslateAnimation(0f,b,0f,a);
anim.setDuration(130);
animT.setDuration(130);
anim.setFillAfter(false);
animT.setFillAfter(false);
view.startAnimation(anim);   
view.startAnimation(animT);   
anim.start(); 
animT.start();

我们可以看到,我无法同时使用这两个动画。我该如何解决这个问题,而不使用XML动画呢?因为我的变量每次都会改变。

3个回答

19

按照以下方式使用AnimationSet

AnimationSet set = new AnimationSet(true);

Animation anim = new ScaleAnimation(1f, 0f, 1f, 0f, b, a);
Animation animT = new TranslateAnimation(0f, b, 0f, a);

set.addAnimation(anim);
set.addAnimation(animT);
set.setDuration(130);

view.startAnimation(set);

我可以在动画过程中更改 new ScaleAnimation(1f, 0f, 1f, 0f, b, a); 的值吗?例如更改 (1f, 0f, 1f, 0f, b, a) - medo
@medo,是的,你可以这样做。实际上,如果你在使用Android Studio,按住Ctrl键并单击代码中的“ScaleAnimation”文本,就会打开文档,它会告诉你有关该类的其他构造函数的信息。 - Shaishav
我没有看到任何更改动画值的方法,你有例子吗? - medo
@medo 我可能在这里弄错了,但是你到底想要改变什么?值吗?比如将1f改为0.5f - Shaishav
如果我可以在动画过程中更改pivotXpivotY的值,那么我将删除平移动画。其中,pivotXpivotY的值为 _(a, b)_。 - medo
显示剩余2条评论

5

你需要使用 AnimationSet 并将你想要的任何动画类型添加到其中,以下是一个例子:

Animation fadeIn = new AlphaAnimation(0, 1);
fadeIn.setDuration(1000);
Animation fadeOut = new AlphaAnimation(1, 0);
fadeOut.setStartOffset(1000);
fadeOut.setDuration(1000);
AnimationSet animation = new AnimationSet(true);
animation.addAnimation(fadeIn);
animation.addAnimation(fadeOut);
view.startAnimation(animation);

2

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