【问题标题】:How to start animations one after another for a view?如何为一个视图一个接一个地启动动画?
【发布时间】:2013-04-25 14:20:16
【问题描述】:

我正在尝试在蜂窝设备上一个接一个地播放动画。

我尝试使用 AnimationSet 和每个动画的 startOffset 值一个接一个地播放动画,但没有运气。

我也尝试创建一个新类来管理动画以一个接一个地开始,但它也不起作用。

代码如下:

public class AnimationChain {

    private final List<Animation> mAnimations = new ArrayList<Animation>();
    private AnimationListener mAnimationListener;
    private final View mViewToAnimate;

    public AnimationChain(final View viewToAnimate) {
        this.mViewToAnimate = viewToAnimate;
    }

    public void addAnimation(final Animation animation) {
        mAnimations.add(animation);
    }

    public void setAnimationListener(final AnimationListener animationListener) {
        this.mAnimationListener = animationListener;
    }

    public List<Animation> getAnimations() {
        return this.mAnimations;
    }

    public Animation getLastAnimation() {
        final int size = mAnimations.size();
        if (size == 0)
            return null;
        return mAnimations.get(size - 1);
    }

    public void startAnimations() {
        if (mAnimations.size() == 0)
            return;
        for (int i = 0; i < mAnimations.size(); ++i) {
            final Animation currentAnimation = mAnimations.get(i);
            final Animation nextAnimation;
            if (i != mAnimations.size() - 1)
                nextAnimation = mAnimations.get(i + 1);
            else
                nextAnimation = null;
            currentAnimation.setAnimationListener(new AnimationListener() {

                @Override
                public void onAnimationStart(final Animation animation) {
                    if (mAnimationListener != null)
                        mAnimationListener.onAnimationStart(animation);
                }

                @Override
                public void onAnimationRepeat(final Animation animation) {
                    if (mAnimationListener != null)
                        mAnimationListener.onAnimationRepeat(animation);
                }

                @Override
                public void onAnimationEnd(final Animation animation) {
                    if (mAnimationListener != null)
                        mAnimationListener.onAnimationEnd(animation);
                    if (nextAnimation != null)
                        mViewToAnimate.startAnimation(nextAnimation);
                }
            });
        }
        final Animation firstAnimation = mAnimations.get(0);
        mViewToAnimate.startAnimation(firstAnimation);
    }
}

似乎它确实调用了下一个动画开始,但它没有做任何我能看到的事情。不过,使用单个动画对任何动画都适用。

谁能帮帮我?我做错了什么?

另外,如果我尝试使用蜂窝版本及以上版本,这个问题还会存在吗?我将如何处理它?也许使用9-old-android library 可以提供帮助?

【问题讨论】:

标签: android animation android-animation chain


【解决方案1】:

您使用什么动画?我用 TranslateAnimation 和 RotateAnimation 试了一下,效果很好。另外,您从哪里调用 startAnimations?

【讨论】:

  • 我尝试了一个翻译动画,将视图“移动”到一边,然后缩放动画以显示它被挤压并反弹回来。也许是我做得不好?
  • 很遗憾,因为它不起作用,我已经删除了整个内容。我希望我有机会再试一次。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-03-27
  • 1970-01-01
  • 2012-02-25
  • 2015-05-12
相关资源
最近更新 更多