2010-07-27 6 views
77

Actualmente tengo una vista en mi aplicación de Android y la vista está reproduciendo una animación de cuadros. Quiero animar la vista para aumentar su tamaño al 150%. Cuando le aplique una animación de escala y se complete la animación de escala, quiero que la vista permanezca en ese nuevo tamaño para el resto del ciclo de vida de la actividad. Lamentablemente, ahora que se completó la animación de ampliación, la vista vuelve al tamaño original. ¿Cómo puedo conseguir que mantenga la nueva transformación animada?¿Cómo puedo animar una vista en Android y mantenerla en la nueva posición/tamaño?

estoy usando

myView.startAnimation(AnimationUtils.loadAnimation(mContext,R.anim.scaleUp150)); 

Gracias!

Respuesta

143

Asegúrese de que añade a continuación atributos al elemento raíz en su animación xml:

android:fillAfter="true" 
android:fillEnabled="true" 
+6

Esta es la verdadera respuesta. ** El OP debería cambiar esta para ser la respuesta aceptada. ** ¡Gracias Qlimax! (P.S. esto no está documentado en la sección "Animación" de la Guía de desarrollo, solo está documentado en los javadocs de la clase Animación. ¡Qué mala documentación!) –

+7

dónde colocar este código? en '' o en etiquetas de animación ('translate' |' rotate' | 'scale')? – xxxxxxxxxadfas

+5

como se menciona a continuación, debe agregarlo al parámetro establecido – cV2

2

EDITAR: La respuesta de Qlimax es mejor, pero como el OP no ha cambiado para cambiar la marca de verificación y no puedo eliminar una respuesta aceptada, la copiaré aquí: simplemente configure fillAfter = true fillEnabled = true

Mi respuesta original (que funciona, pero es ligeramente ridícula en comparación) de la siguiente manera:

para que las cosas funcionan como se esperaba después de la animación, al menos según this thread, tendrá que escribir un controlador de onAnimationEnd, y en allí, ajuste manualmente los límites "reales" (pre-transformación) de su vista para que coincidan con el resultado final de la animación de escala.

+0

Hola Walter. He sobrescrito el onAnimationEnd, pero no sé cómo ajustar los límites "reales" de la vista para que coincida con la escala de la animación. Sé exactamente qué dp quiero que termine, pero no puedo encontrar la función para "setWidth()" o "setHeight()". – justinl

+1

Creo que esos están almacenados en los LayoutParams. Debería poder hacer 'view.getLayoutParams(). Width = newWidth; view.getLayoutParams(). height = newHeight; view.requestLayout(); '. (La última llamada es necesaria para informar al árbol de vista que debe ser recalculada). –

+0

oh excelente: D gracias! Esto es genial – justinl

1

En realidad, como la animación que está utilizando parece estar insertada en el marco de Android, no estoy seguro de que pueda cambiar nada.
Sin embargo, puede crear su propia animación siguiendo the example in the documentation. Y tendrá que poner android: fillAfter = "true" si desea mantener la escala después del final de la animación.

+2

scaleUp150 es una animación personalizada que escribí en xml (aunque es extremadamente básica). Puse android: fillAfter = "true" dentro de la animación, pero aún así vuelve al tamaño original: S – justinl

49

tratar la construcción de la animación de código y configurar las propiedades como esta

anim.setFillEnabled(true); 
anim.setFillAfter(true); 
+0

pero se crea un nuevo problema, recibo un evento táctil en él.http: //stackoverflow.com/questions/4728908/android-view-with-view-gone-still-receives-ontouch-and-onclick – W00di

30

si quieres para poner su animación en un xml, puede necesitar esto para ayudar:

<set 
android:fillEnabled="true" 
android:fillAfter="true" 
xmlns:android="http://schemas.android.com/apk/res/android"> 

<translate 
    android:fromYDelta="0" 
    android:toYDelta="-20%p" 
    android:duration="7000" /> 

</set> 

https://stackoverflow.com/a/6519233/371749

favor tengan en cuenta también la otra respuesta, me ayudó :) buena suerte!

1

Ponga android: fillAfter = "true" en la etiqueta SET - como ponerlos en la etiqueta de animación los limita a los "parámetros de transición" o "durante/mientras animan los parámetros". Los parámetros en el SET aplicarán la transformación que está buscando después de que finalice las animaciones.

18

Hoy en día se ha convertido en muy fácil:

view.animate().x(valueX).y(valueY).setDuration(500).start(); 

(En este fragmento ViewPropertyAnimator se ha utilizado).

También es posible agregar varias otras opciones.

La vista se ubicará en la nueva posición.

+0

Esto debe publicarse como tema trending –

Cuestiones relacionadas