Android ScaleAnimation和TranslateAnimation,如何避免ScaleAnimation运动

时间:2012-03-14 15:58:56

标签: android android-animation

我有一个带有ScaleAnimation和TranslateAnimation的AnimationSet,如下所示:

TranslateAnimation:

TranslateAnimation goTopFromRight =
        new TranslateAnimation(0, -(right.getLeft()-top.getLeft()),
                               0,-(right.getTop()-top.getTop()));

ScaleAnimation:

ScaleAnimation =  setSizeForTop = new ScaleAnimation(1, 2, 1, 2);

和AnimationSet:

bringToLeftFromTopAnimationSet  = new AnimationSet(true);
bringToTopFromRightAnimationSet.addAnimation(goTopFromRight);
bringToTopFromRightAnimationSet.addAnimation(setSizeForTop);

问题在于,当我尝试仅使用ScaleAnimation时,我的项目会转到我想要的位置,但是当我在AnimationSet中使用ScaleAnimation和TranslateAnimation时,我的项目翻译的次数超出了我的需要,就像ScaleAnimation一样介绍一些补充动作abd我不知道如何删除它们。

感谢您的帮助。

4 个答案:

答案 0 :(得分:5)

正确的解决方案是更改动画的顺序。规模必须先行:

bringToTopFromRightAnimationSet.addAnimation(setSizeForTop);
bringToTopFromRightAnimationSet.addAnimation(goTopFromRight);

答案 1 :(得分:4)

要在使用ScaleAnimation和TranslateAnimation时避免ScaleAnimation运动,您必须将TranslateAnimation参数与ScaleAnimation的参数相乘,如下所示:

TranslateAnimation goRightFromTop;
ScaleAnimation sizeNotUp;

goRightFromTop  = new TranslateAnimation(0,(-( invisibleCenterImageView.getLeft() - imageViewRight.getLeft() ))*(1/0.6667f), 0, (-( invisibleCenterImageView.getTop() - imageViewRight.getTop()))*(1/0.6667f)); 
sizeNotUp       = new ScaleAnimation(1,0.6667f,1,0.6667f,Animation.RELATIVE_TO_SELF, (float)0.5, Animation.RELATIVE_TO_SELF, (float)0.5); 

然后,您惊讶地删除了ScaleAnimation运动。

答案 2 :(得分:1)

我记得有嵌套动画的奇怪问题。 您是否尝试过手动设置轴心点?请参阅http://developer.android.com/reference/android/view/animation/ScaleAnimation.html中的public ScaleAnimation (float fromX, float toX, float fromY, float toY, float pivotX, float pivotY)。 它可以工作。

答案 3 :(得分:0)

我的解决方案是在视图外添加一个容器,并在将平移动画应用到容器时将缩放动画应用到视图中。
然后你甚至可以通过XML~

制作更复杂的动画