2012-03-14 9 views
6

Tengo una AnimationSet con el interior de un ScaleAnimation y una TranslateAnimation así:Android ScaleAnimation y TranslateAnimation, la forma de evitar el movimiento 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); 

y Conjunto de animación:

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

El problema es que cuando trato de usar solo ScaleAnimation, mi elemento va a la posición que quiero, pero cuando uso ScaleAnimation con TranslateAnimation en el AnimationSet, mi artículo se traduce más de lo que necesito, como si ScaleAnimation introduce algunos movimientos suplementarios y no sé cómo eliminarlos.

Gracias por su ayuda.

Respuesta

4

Para evitar el movimiento ScaleAnimation cuando se utiliza el ScaleAnimation y TranslateAnimation, hay que multiplicar los parámetros TranslateAnimation con los de ScaleAnimation así:

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

Y luego, la sorpresa ha eliminado el movimiento ScaleAnimation.

1

Recuerdo haber tenido problemas extraños con animaciones anidadas también. ¿Ha intentado configurar el punto de pivote manualmente? Ver public ScaleAnimation (float fromX, float toX, float fromY, float toY, float pivotX, float pivotY) desde http://developer.android.com/reference/android/view/animation/ScaleAnimation.html para ello. Podría funcionar.

+1

Gracias por responder a @ShadowMare y disculpe por la repetición tardía. De hecho, no entiendo qué son el flotador pivotX y float pivotY. –

+0

lo siento, no noté el comentario. Estoy bastante seguro de que ya descubrió que ambos valores de pivote son el punto "ancla" de la animación. – ShadowMare

+1

Gracias @ShadowMare, de hecho, para evitar el muvement, tenemos que multiplicar la TranslateAnimation por los parámetros de ScaleAnimation. –

5

La solución correcta es cambiar el orden de las animaciones. Escala debe ir primero:

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

Esta debería ser la solución correcta. ¡Gracias! – Steelight

+0

Claro, esta respuesta es correcta –

0

Mi solución es añadir un contenedor fuera de su vista, y aplicar la animación escala a la vista mientras se aplica la animación traducir al contenedor.
Luego puede hacer una animación más compleja incluso a través de XML ~

Cuestiones relacionadas