gpt4 book ai didi

android - 在 ViewPropertyAnimator 中指定重复计数/模式?

转载 作者:塔克拉玛干 更新时间:2023-11-02 22:57:08 27 4
gpt4 key购买 nike

有没有办法在使用 ViewPropertyAnimator 时指定重复计数/模式?

最佳答案

不幸的是,ViewPropertyAnimator 没有任何方法来指定它执行的动画的重复次数。正如 ViewPropertyAnimator 中 startAnimation() 方法的 javadoc 中所述:

Starts the underlying Animator for a set of properties. We use a single animator that simply runs from 0 to 1, and then use that fractional value to set each property value accordingly.

不幸的是,它使用的值动画器是私有(private)的,我们无法通过 ViewPropertyAnimator 的公共(public)方法提供的任何其他方式来操纵它的状态。

重复动画

为您的 ViewPropertyAnimator 指定一个AnimatorListener,它将在每次迭代后重新启动动画:

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();
}

关于android - 在 ViewPropertyAnimator 中指定重复计数/模式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15946003/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com