在使用ViewPropertyAnimator时,是否有指定重复计数/模式的方法?
发布于 2015-07-24 07:55:42
不幸的是,ViewPropertyAnimator没有任何方法来指定它执行的动画的重复计数。正如javadocsforstartAnimation()方法在ViewPropertyAnimator中所述:
为一组属性启动基础动画器。我们使用一个简单地从0到1的动画器,然后使用这个小数值来相应地设置每个属性值。
不幸的是,它使用的值动画是私有的,除了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();
}https://stackoverflow.com/questions/15946003
复制相似问题