ObjectAnimator 重复循环延迟

Posted

技术标签:

【中文标题】ObjectAnimator 重复循环延迟【英文标题】:ObjectAnimator repeat loop delay 【发布时间】:2017-02-19 16:16:10 【问题描述】:
<?xml version="1.0" encoding="utf-8"?>
<objectAnimator xmlns:android="http://schemas.android.com/apk/res/android"
    android:propertyName="rotationX"
    android:valueFrom="0"
    android:valueTo="-360"
    android:repeatCount="infinite"> 
</objectAnimator>

这是我的对象动画 xml

 //Animating the NormalLayout
   final ObjectAnimator anim4 = (ObjectAnimator) //Object animator
   AnimatorInflater.loadAnimator(this, R.animator.rotate_four);
//And this is my java code

我想在其循环之间添加延迟,例如再次循环之间 3 秒。我试过动画听众onRepeatonEnd 有点东西,但没有奏效。我希望循环之间有一些延迟。

我们将不胜感激。

【问题讨论】:

在提问前请参阅how to ask。只问你想要什么,不要闲聊! 【参考方案1】:

我发现最好将 DelayedAnimationRepeater 更改为不重新启动动画,从而允许按预期调用 .setRepeatCount(ValueAnimator.INFINITE) 和 onAnimationRepeat。

所以简单地改成

public class DelayedAnimationRepeater implements Animator.AnimatorListener 
    private long delayMillis;

    public DelayedAnimationRepeater(long delayMillis) 
        this.delayMillis = delayMillis;
    

    @Override
    public void onAnimationStart(Animator animator)  

    @Override
    public void onAnimationEnd(final Animator animator)  

    @Override
    public void onAnimationCancel(Animator animator)  

    @Override
    public void onAnimationRepeat(Animator animator) 
        animator.pause();
        new Handler().postDelayed(animator::resume, delayMillis);
    

导致更好的体验恕我直言。现在您可以真正重复您的动画并监听 onAnimationRepeat 事件。

【讨论】:

【参考方案2】:

请尝试 1.删​​除xml属性android:repeatCount="infinite" 2.添加java代码

anim4.addListener(new AnimatorListenerAdapter()
    @Override
    public void onAnimationEnd(Animator animation) 
        new Handler().postDelayed(new Runnable() 
            @Override
            public void run() 
                anim4.start();
            
        , 3000);
    
);

【讨论】:

【参考方案3】:

助手类

public class DelayedAnimationRepeater implements Animator.AnimatorListener 
    private long delayMillis;

    public DelayedAnimationRepeater(long delayMillis) 
        this.delayMillis = delayMillis;
    

    @Override
    public void onAnimationStart(Animator animator) 

    

    @Override
    public void onAnimationEnd(final Animator animator) 
        new Handler().postDelayed(new Runnable() 
            @Override
            public void run() 
                // Start delay should only affect initial start, not repeats
                animator.setStartDelay(0);
                animator.start();
            
        , delayMillis);
    

    @Override
    public void onAnimationCancel(Animator animator) 

    

    @Override
    public void onAnimationRepeat(Animator animator) 

    

用法

anim4.addListener(new DelayedAnimationRepeater(3000));

【讨论】:

以上是关于ObjectAnimator 重复循环延迟的主要内容,如果未能解决你的问题,请参考以下文章

在 VSTS Web 测试循环中添加延迟/等待时间 [重复]

恒速的Android ObjectAnimator

jQuery动画延迟问题与自排队循环的步骤

引用计数--1

时间延迟视觉C ++ [重复]

在Java中延迟一个循环以获得动画效果