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

Android ScaleAnimation和TranslateAnimation,如何避免ScaleAnimation移动,android,android-animation,Android,Android Animation,我有一个动画集,里面有一个ScaleAnimation和一个TranslateAnimation,如下所示: TranslateAnimation goRightFromTop; ScaleAnimation sizeNotUp; goRightFromTop = new TranslateAnimation(0,(-( invisibleCenterImageView.getLeft() - imageViewRight.getLeft() ))*(1/0.6667f), 0, (-( i

我有一个动画集,里面有一个ScaleAnimation和一个TranslateAnimation,如下所示:

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); 
翻译意象:

TranslateAnimation goTopFromRight =
        new TranslateAnimation(0, -(right.getLeft()-top.getLeft()),
                               0,-(right.getTop()-top.getTop()));
缩放图像:

ScaleAnimation =  setSizeForTop = new ScaleAnimation(1, 2, 1, 2);
和动画集:

bringToLeftFromTopAnimationSet  = new AnimationSet(true);
bringToTopFromRightAnimationSet.addAnimation(goTopFromRight);
bringToTopFromRightAnimationSet.addAnimation(setSizeForTop);
问题是,当我尝试仅使用缩放动画时,我的项目会转到我想要的位置,但当我在动画集中使用缩放动画和平移动画时,我的项目会进行超出我需要的平移,好像缩放动画引入了一些补充动作,我不知道如何删除它们


谢谢你的帮助。

我记得嵌套动画也有奇怪的问题。 您是否尝试过手动设置轴点?请参见
public ScaleAnimation(float-fromX,float-toX,float-fromY,float-toY,float-pivotX,float-pivotY)
from了解它。
它可能会起作用。

要避免在使用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); 

然后,您删除了缩放动画动作。

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

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

我的解决方案是在视图外添加一个容器,并将缩放动画应用于视图,同时将平移动画应用于容器。

然后,您甚至可以通过XML制作更复杂的动画~

感谢您的回答@ShadowMare,并为延迟重播感到抱歉。事实上,我不明白什么是浮点数据透视X和浮点数据透视Y。对不起,我没有注意到这个评论。我很确定你已经发现两个轴值都是动画的“锚定”点。谢谢@ShadowMare,事实上,为了避免出现这种情况,我们必须将TranslateAnimation乘以ScaleAnimation参数。