首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在ViewPropertyAnimator中重复动画?

如何在ViewPropertyAnimator中重复动画?
EN

Stack Overflow用户
提问于 2014-09-07 09:18:30
回答 1查看 1.1K关注 0票数 1

有人知道如何在ViewPropertyAnimator中制作重复的动画吗?

我尝试过所有方法,但都不起作用,ViewPropertyAnimator不接受其他类型动画的方法

EN

回答 1

Stack Overflow用户

发布于 2014-09-07 09:33:35

在调用start()之前包装ViewPropertyAnimator可以做到这一点。下面我写了一个包装类,它将在动画结束时重复动画。您可以修改该类以满足您的需要。

代码语言:javascript
复制
package main.java.app.com.animation;
import android.animation.Animator;
import android.support.v4.view.ViewPropertyAnimatorListener;
import android.view.ViewPropertyAnimator;

/**
 * Created by nikola on 9/7/14.
 */
public class RepeatableViewPropertyAnimatorWrapper implements Animator.AnimatorListener {

    private static RepeatableViewPropertyAnimatorWrapper mInstance;
    private  ViewPropertyAnimator mViewPropertyAnimator;
    private Animator.AnimatorListener mViewPropertyAnimatorListener;
    private boolean willRepeat = true;
    private Animator mCurrentAnimator;

    public static RepeatableViewPropertyAnimatorWrapper wrap(ViewPropertyAnimator animator){
        mInstance = new RepeatableViewPropertyAnimatorWrapper(animator);
        return mInstance; 
    }
    public static RepeatableViewPropertyAnimatorWrapper withAnimatorListener(Animator.AnimatorListener animatorListener){
            mInstance.setAnimatorListener(animatorListener);
        return mInstance;
    }
    private void setAnimatorListener(Animator.AnimatorListener animatorListener) {
        mViewPropertyAnimatorListener = animatorListener;
    }

    public RepeatableViewPropertyAnimatorWrapper(ViewPropertyAnimator animator){
        mViewPropertyAnimator = animator;
    }
    public RepeatableViewPropertyAnimatorWrapper(ViewPropertyAnimator animator, Animator.AnimatorListener animatorListener){
        mViewPropertyAnimator = animator;
        mViewPropertyAnimatorListener = animatorListener;
    }
    public boolean isRepeating() {
        return willRepeat;
    }

    public void setRepeat(boolean willRepeat) {
        this.willRepeat = willRepeat;
    }

    private void setup(){
        mViewPropertyAnimator.setListener(this);
    }

    @Override
    public void onAnimationStart(Animator animation) {
        mCurrentAnimator = animation;
        if(mViewPropertyAnimatorListener != null){
            mViewPropertyAnimatorListener.onAnimationStart(animation);
        }
    }

    @Override
    public void onAnimationEnd(Animator animation) {
        if(mViewPropertyAnimatorListener != null){
            mViewPropertyAnimatorListener.onAnimationEnd(animation);
        }
        repeatAnimation();

    }
    public void start(){
        mViewPropertyAnimator.start();
    }

    private void repeatAnimation() {
        if(willRepeat){
            start();
            onAnimationRepeat(mCurrentAnimator);
        }
        mInstance = null;

    }

    @Override
    public void onAnimationCancel(Animator animation) {
        if(mViewPropertyAnimatorListener != null){
            mViewPropertyAnimatorListener.onAnimationCancel(animation);
        }
    }

    @Override
    public void onAnimationRepeat(Animator animation) {
        if(mViewPropertyAnimatorListener != null){
            mViewPropertyAnimatorListener.onAnimationRepeat(animation);
        }

    }

用法:

代码语言:javascript
复制
RepeatableViewPropertyAnimatorWrapper.wrap(view.animate().alpha(0).setDuration(500)).withAnimatorListener(myListener).start();

请注意,我没有测试这段代码,请记住,根据ViewPropertyAnimator实现的不同,设置值可能会发生变化。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25706252

复制
相关文章

相似问题

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