Android ScaleAnimation и TranslateAnimation, как избежать движения ScaleAnimation

у меня есть AnimationSet с внутри ScaleAnimation и TranslateAnimation, как это:

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, мой элемент переходит в нужную позицию, но whe я использую ScaleAnimation с TranslateAnimation в AnimationSet, мой элемент переводит больше, чем мне нужно, как будто ScaleAnimation вводит некоторые дополнительные движения abd я не знаю, как их удалить.

Спасибо за помощь.

4 ответов


правильным решением является изменение порядка анимации. Масштаб должен идти первым:

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

чтобы избежать движения ScaleAnimation при использовании ScaleAnimation и TranslateAnimation, вы должны умножить параметры 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.


Я помню, что у меня были странные проблемы с вложенными анимациями. Вы пробовали установить точку поворота вручную? См.public ScaleAnimation (float fromX, float toX, float fromY, float toY, float pivotX, float pivotY) от http://developer.android.com/reference/android/view/animation/ScaleAnimation.html для него. Это может сработать.


мое решение-добавить контейнер вне вашего представления и применить анимацию масштаба к вашему представлению при применении анимации перевода к контейнеру.
Тогда вы можете сделать более сложную анимацию даже через XML~