2013-10-04 80 views
0

我有三种动画,比如缩放,平移和缩放。我按顺序播放这些动画。前两个工作正常,但最后一个缩放动画将视图的位置重置为原始位置。如果我删除了最后一个缩放动画,那么在翻译动画之后视图保持新位置时工作良好。你对这种行为有什么想法吗?比例动画重置位置

AnimationSet animationSet = new AnimationSet(false); 
animationSet.setFillAfter(true); 

ScaleAnimation scaleAnimation1 = new ScaleAnimation(0.0f, 1.0f, 0.0f, 1.0f); 
scaleAnimation1.setDuration(500); 
scaleAnimation1.setFillAfter(true); 

TranslateAnimation moveAnim = new TranslateAnimation(0, -x, 0, -y); 
moveAnim.setDuration(1000); 
moveAnim.setStartOffset(500); 
moveAnim.setFillAfter(true); 

ScaleAnimation scaleAnimation2 = new ScaleAnimation(1.0f, 0.0f, 1.0f, 0.0f); 
scaleAnimation2.setDuration(500); 
scaleAnimation2.setStartOffset(1000); 
scaleAnimation2.setFillAfter(true); 
scaleAnimation2.setFillBefore(true); 

animationSet.addAnimation(scaleAnimation1); 
animationSet.addAnimation(moveAnim); 
animationSet.addAnimation(scaleAnimation2); 
+0

“将视图的位置重置为原始位置” - 您能更精确吗?重置看起来像跳过屏幕?它重新设置为何处。 Android SDK的动画有一个常见的误解/设计缺陷,可能会导致这种情况。 – Tom

+0

我的意思是,在动画之前,视图是屏幕的中心。翻译动画之后,视图会显示在顶部。当'scaleAnimation2'开始时,视图也会回到屏幕的中心 –

回答

1

scaleAnimation2.setFillAfter(true); - 如果fillAfter是真实的,改造这个动画执行将持续,当它完成

scaleAnimation2.setFillBefore(true); - 如果fillBefore是真实的,这个动画将动画的开始时间之前申请转型。

这两个属性不能同时工作,后面设置的属性是有效的。 那么,删除scaleAnimation2.setFillBefore(true);可能会解决您的问题。