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

2023-12-06

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

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

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

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

有谁知道我可以统一缩放多步动画的方法吗?

Thanks

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


我已经自己解决了这个问题。要缩放整个动画,您需要以编程方式创建动画,并且当您使用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);
  
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在 Android 中动态调整补间动画的持续时间/速度 的相关文章

随机推荐