不幸的是,ViewPropertyAnimator没有任何方法来指定它执行的动画的重复次数。正如 ViewPropertyAnimator 中方法的 javadoc 中所述startAnimation():
启动一组属性的底层动画器。我们使用一个简单地从 0 运行到 1 的动画器,然后使用该小数值来相应地设置每个属性值。
不幸的是,它使用的值动画器是私有的,除了 的公共方法提供的之外,我们不可能以任何其他方式操纵它的状态ViewPropertyAnimator。
指定一个将在每次迭代后重新启动动画的AnimatorListener:ViewPropertyAnimator
viewPropertyAnimator.setListener(new Animator.AnimatorListener() {
...
@Override
public void onAnimationEnd(Animator animation) {
viewPropertyAnimator.start();
}
...
});
viewPropertyAnimator.start();
Run Code Online (Sandbox Code Playgroud)
如果你想指定确切的执行次数,可以这样引入一个变量:
int[] repeatCount = {8}; //your repeat count goes here
viewPropertyAnimator.setListener(new Animator.AnimatorListener() {
...
@Override
public void onAnimationEnd(Animator animation) {
if(repeatCount-- > 0)
viewPropertyAnimator.start();
}
...
});
viewPropertyAnimator.start();
Run Code Online (Sandbox Code Playgroud)
不过,您应该注意的是,通过(开始值和结束值)进行动画处理的值ViewPropertyAnimator存储在 的实例中ViewPropertyAnimator,因此在每次动画后不会刷新。因此,如果您想在每次迭代后以增量方式对视图的某些属性进行动画处理,请确保在每次开始之前创建动画制作器的新实例。就像这样:
public void animateEndlessly(final View v) {
ViewPropertyAnimator viewPropertyAnimator = v.animate().scaleX(1.5f).scaleY(1.5f).setDuration(300);
viewPropertyAnimator.setListener(new Animator.AnimatorListener() {
...
@Override
public void onAnimationEnd(Animator animation) {
animateEndlessly(v);
}
...
});
viewPropertyAnimator.start();
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
861 次 |
| 最近记录: |