使用ViewPropertyAnimator时是否可以指定重复计数/模式?
最佳答案
不幸的是,ViewPropertyAnimator
没有任何方法来指定其执行的动画的重复计数。如ViewPropertyAnimator中startAnimation()
方法的javadocs中所述:
不幸的是,它使用的值动画器是私有(private)的,除了ViewPropertyAnimator
的公共(public)方法提供的方法外,我们无法以其他任何方式来操纵它的状态。
重复动画
为您的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
实例中,因此在每次动画后都不会刷新。因此,如果您希望在每次迭代后为 View 的某些属性递增动画,请确保在每次启动之前创建一个动画师的新实例。像这样: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();
}