2012-03-14 6 views
6

Mam AnimationSet z wewnątrz ScaleAnimation i TranslateAnimation tak:Android ScaleAnimation i TranslateAnimation, jak uniknąć ruchu ScaleAnimation

TranslateAnimation:

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

ScaleAnimation:

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

i Animacja:

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

Problem polega na tym, że gdy próbuję używać tylko ScaleAnimation, moja pozycja idzie do pozycji, której chcę, ale jeśli używam Skalowania z animacją w AnimationSet, mój element tłumaczy więcej niż potrzebuję, tak jakby ScaleAnimation wprowadza dodatkowe ruchy abd nie wiem jak je usunąć.

Dziękuję za pomoc.

Odpowiedz

4

Aby uniknąć ruchu ScaleAnimation podczas korzystania z ScaleAnimation i TranslateAnimation, trzeba pomnożyć zadać parametry TranslateAnimation z tymi z ScaleAnimation tak:

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); 

A potem zaskoczyć usunięto ruch ScaleAnimation.

1

Pamiętam, że miałem dziwne problemy z zagnieżdżonymi animacjami. Czy próbowałeś ręcznie ustawić punkt obrotu? Zobacz public ScaleAnimation (float fromX, float toX, float fromY, float toY, float pivotX, float pivotY) dla niego. To może działać.

+1

Dziękuję za odpowiedź @ ShadowMare i przepraszam za późniejsze powtórzenie. W rzeczywistości nie rozumiem, co to jest pivotX float i floatY. –

+0

Przepraszam, nie zauważyłem komentarza. Jestem pewien, że już zorientowałeś się, że obie wartości przestawne są "punktem zakotwiczenia" animacji. – ShadowMare

+1

Dziękuję @ShadowMare, w rzeczywistości, w celu uniknięcia aktuacji, musimy pomnożyć TranslateAnimation przez parametry ScaleAnimation. –

5

Poprawnym rozwiązaniem jest zmiana kolejności animacji. Skala musi iść pierwsza:

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

To powinno być prawidłowe rozwiązanie. Dzięki! – Steelight

+0

Oczywiście, ta odpowiedź jest poprawna –

0

Moje rozwiązanie polega na dodaniu kontenera poza Twoim widokiem i zastosowaniu animacji wagi do widoku podczas stosowania translacji animacji do kontenera.
Następnie można tworzyć bardziej złożone animacje nawet za pomocą XML ~