假设我有一个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部分动画并独立缩放每个部分或使用代码生成动画,但如果有更简单的解决方案,那么这将是首选。
答案 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);