首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ObjectAnimator重复环路延迟

ObjectAnimator重复环路延迟
EN

Stack Overflow用户
提问于 2016-10-11 06:55:08
回答 3查看 3.3K关注 0票数 2
代码语言:javascript
复制
<?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

代码语言:javascript
复制
 //Animating the NormalLayout
   final ObjectAnimator anim4 = (ObjectAnimator) //Object animator
   AnimatorInflater.loadAnimator(this, R.animator.rotate_four);
//And this is my java code

我想在它的循环之间添加延迟,就像循环之间的3秒。我试过动画片听众onRepeatonEnd之类的东西,但都没成功。我想在两圈之间延迟一下。

任何帮助都将不胜感激。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2016-10-11 07:47:41

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

代码语言:javascript
复制
anim4.addListener(new AnimatorListenerAdapter(){
    @Override
    public void onAnimationEnd(Animator animation) {
        new Handler().postDelayed(new Runnable() {
            @Override
            public void run() {
                anim4.start();
            }
        }, 3000);
    }
});
票数 5
EN

Stack Overflow用户

发布于 2020-02-05 12:56:03

我发现最好将DelayedAnimationRepeater更改为不重新启动动画,从而允许像人们所期望的那样调用.setRepeatCount(ValueAnimator.INFINITE)和onAnimationRepeat。

所以简单地把它更改为

代码语言:javascript
复制
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);
    }
}

结果是一个更好的体验imho。现在,您可以真正地重复您的动画并侦听onAnimationRepeat事件。

票数 5
EN

Stack Overflow用户

发布于 2017-12-10 03:02:12

Helper类

代码语言:javascript
复制
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) {

    }
}

使用

代码语言:javascript
复制
anim4.addListener(new DelayedAnimationRepeater(3000));
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39971875

复制
相关文章

相似问题

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