如何使AnimationSet重复?

时间:2018-04-06 17:10:35

标签: android animation

我的AnimationSet中有2个动画。它们需要按顺序发生并且持续时间不同。如何让我的AnimationSet无限重复?

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([^/]+)\.html?$ /photography/albums/viewphoto.php?id=$1 [QSA,NC,L]

1 个答案:

答案 0 :(得分:1)

引用AnimationSet上的documentation

  

AnimationSet从动画继承行为的方式非常重要。应用于AnimationSet的一些Animation属性会影响AnimationSet本身,有些会被推送到子节点,有些会被忽略,如下所示:

     
      
  • duration,repeatMode,fillBefore,fillAfter:这些属性在AnimationSet对象上设置时,将被下推到所有子动画。
  •   
  • repeatCount,fillEnabled:AnimationSet忽略这些属性。
  •   
  • startOffset,shareInterpolator:这些属性适用于AnimationSet本身。
  •   

这解释了为什么你的尝试不成功。相反,您可以使用Animation.AnimationListener在完成动画后重新启动动画:

public void cartoonBreathing(final ImageView v, int inhale_time, int exhale_time){
    final AnimationSet breathing_set = new AnimationSet(true);

    Animation inhale = new ScaleAnimation(1.0f,2f,1.0f,2f,
            Animation.RELATIVE_TO_SELF,0.5f,
            Animation.RELATIVE_TO_SELF,0.5f);
    inhale.setFillAfter(true);
    inhale.setDuration(inhale_time * 1000);

    Animation exhale = new ScaleAnimation(1.0f,0.5f,1.0f,0.5f,
            Animation.RELATIVE_TO_SELF,0.5f,
            Animation.RELATIVE_TO_SELF,0.5f);
    exhale.setFillAfter(true);
    exhale.setDuration(exhale_time * 1000);

    breathing_set.addAnimation(inhale);
    breathing_set.addAnimation(exhale);

    breathing_set.setAnimationListener(new Animation.Animation.AnimationListener()
    {
        @Override
        public void onAnimationStart(Animation animation){}

        @Override
        public void onAnimationEnd(Animation animation)
        {
            v.startAnimation(breathing_set);
        }

        @Override
        public void onAnimationRepeat(Animation animation){}
    });

    v.startAnimation(breathing_set);
}

请注意,ImageViewAnimationSet必须宣布为final,才能从AnimationListener

中进行访问

如果应用停止,也可以考虑在clearAnimation()上调用ImageView