我的AnimationSet中有2个动画。它们需要按顺序发生并且持续时间不同。如何让我的AnimationSet无限重复?
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([^/]+)\.html?$ /photography/albums/viewphoto.php?id=$1 [QSA,NC,L]
答案 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);
}
请注意,ImageView
和AnimationSet
必须宣布为final
,才能从AnimationListener
如果应用停止,也可以考虑在clearAnimation()
上调用ImageView
。