使用 ViewPropertyAnimator 时有没有办法指定重复计数/模式?
问问题
1097 次
1 回答
4
不幸的是,ViewPropertyAnimator
没有任何方法可以指定它执行的动画的重复次数。正如startAnimation()
ViewPropertyAnimator 中方法的 javadocs 中所述:
为一组属性启动底层 Animator。我们使用一个简单地从 0 运行到 1 的动画器,然后使用该小数值来相应地设置每个属性值。
不幸的是,它使用的 value animator 是私有的,除了ViewPropertyAnimator
.
重复动画
AnimatorListener
为您指定一个ViewPropertyAnimator
,它将在每次迭代后重新启动动画:
viewPropertyAnimator.setListener(new Animator.AnimatorListener() {
...
@Override
public void onAnimationEnd(Animator animation) {
viewPropertyAnimator.start();
}
...
});
viewPropertyAnimator.start();
如果要指定确切的执行次数,请以这种方式引入变量:
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();
编辑
但是,您应该注意,由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();
}
于 2015-07-24T07:55:42.360 回答