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 秒。我试过动画听众onRepeat
,onEnd
有点东西,但没有奏效。我希望循环之间有一些延迟。
我们将不胜感激。
【问题讨论】:
在提问前请参阅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 重复循环延迟的主要内容,如果未能解决你的问题,请参考以下文章