首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在ViewPropertyAnimator中指定重复计数/模式?

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

Stack Overflow用户
提问于 2013-04-11 10:06:02
回答 1查看 1.2K关注 0票数 5

在使用ViewPropertyAnimator时,是否有指定重复计数/模式的方法?

EN

回答 1

Stack Overflow用户

发布于 2015-07-24 07:55:42

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

为一组属性启动基础动画器。我们使用一个简单地从0到1的动画器,然后使用这个小数值来相应地设置每个属性值。

不幸的是,它使用的值动画是私有的,除了ViewPropertyAnimator的公共方法之外,我们不可能以任何其他方式操作它的状态。

重复动画

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

代码语言:javascript
复制
viewPropertyAnimator.setListener(new Animator.AnimatorListener() {

    ...

    @Override
    public void onAnimationEnd(Animator animation) {
        viewPropertyAnimator.start();
    }

    ...

});
viewPropertyAnimator.start();

如果要指定执行的确切数目,请以下列方式引入一个变量:

代码语言:javascript
复制
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实例中,因此在每次动画之后都不会刷新。因此,如果您想在每次迭代之后递增地动画视图的一些属性,请确保在每次开始之前创建一个动画器的新实例。就像这样:

代码语言:javascript
复制
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();
    }
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15946003

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档