如何在Android中动态调整Tween动画的持续时间/速度

时间:2010-09-01 15:24:41

标签: android animation dynamic duration

假设我有一个Android应用程序,在该应用程序中,我想要以“L”形状为球形图形设置动画。这将要求我定义一个Tween动画,我在其中创建一个动画xml文件(如下所示)并将其应用于其中包含球形图形的视图。

<translate>
Ydelta = 20;
offset = 0;
duration = 100;
</translate>

<translate>
Xdelta = 20;
offset = 100;
duration = 100;
</translate>

现在假设我想动态控制这个动画的速度,以便随着时间的推移,L动画变得更快,更快。如何动态控制整个动画的速度?我已经尝试了myAnimation.setDuration($ var),但这似乎只适用于动画的第一部分。偏移量大于0的动画的任何部分都不会通过setDuration()方法调整其持续时间。

有没有人知道我可以统一缩放多集动画的方法?

由于

ps - 我知道有很多方法可以解决这个问题,例如创建2部分动画并独立缩放每个部分或使用代码生成动画,但如果有更简单的解决方案,那么这将是首选。

1 个答案:

答案 0 :(得分:8)

我自己解决了这个问题。要缩放整个动画,您需要以编程方式创建动画,并在使用setDuration();设置动画持续时间时,将其传递给变量,而不是在xml中进行硬编码。

现在,每当我调用动画时,我都会向其传递动画持续时间mAnimDuration,然后即时创建新的时间缩放动画。您会注意到动画第二部分的偏移量设置为动画第一部分的持续时间。

以下是我的代码中的示例:

AnimationSet rootSet = new AnimationSet(true);

TranslateAnimation transX = new TranslateAnimation(Animation.RELATIVE_TO_SELF, 0, Animation.RELATIVE_TO_SELF, 2, 0,0,0,0);
transX.setStartOffset(0);  
transX.setDuration(mAnimDuration/2);  
rootSet.addAnimation(transX);

TranslateAnimation transX2 = new TranslateAnimation(Animation.RELATIVE_TO_SELF, 0, Animation.RELATIVE_TO_SELF, 2, 0,0,0,0);  
transX2.setStartOffset(mAnimDuration/2);  
transX2.setDuration(mAnimDuration/2);  
rootSet.addAnimation(transX2);