Actualmente tengo una vista en mi aplicación de Android y la vista está reproduciendo una animación de cuadro. Quiero animar la vista para aumentar su tamaño al 150%. Cuando le aplico una animación de escala y se completa la animación de escala, quiero que el espectador permanezca en ese nuevo tamaño durante el resto del ciclo de vida de la actividad. Desafortunadamente, en este momento, cuando se completa la animación de ampliación, la vista vuelve al tamaño original. ¿Cómo puedo hacer que se mantenga la nueva transformación animada?
Estoy usando
myView.startAnimation(AnimationUtils.loadAnimation(mContext,R.anim.scaleUp150));
¡Gracias!
<set ...></set>
o en etiquetas de animación (translate
|rotate
|scale
)?fillAfter
solo mantendrá los píxeles de la vista mientras que la vista real seguirá en la posición inicial. Necesita configurar manualmenteLayoutParams
su vista probablemente en onAminationEnd (oyente).intente construir la animación a partir del código y configurar las propiedades de esta manera
anim.setFillEnabled(true); anim.setFillAfter(true);
fuente
si desea poner su animación en un xml , es posible que necesite 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
por favor también aprecie la otra respuesta, me ayudó :) ¡buena suerte!
fuente
Hoy en día se ha vuelto muy fácil:
view.animate().x(valueX).y(valueY).setDuration(500).start();
(En este fragmento se ha utilizado ViewPropertyAnimator).
También es posible agregar muchas otras opciones.
La vista se ubicará en la nueva posición.
fuente
EDITAR: La respuesta de Qlimax es mejor, pero dado que el OP no ha regresado 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) es la siguiente:
Para que las cosas funcionen como se esperaba después de la animación, al menos de acuerdo con este hilo , tendrá que escribir un
onAnimationEnd
controlador, y allí, ajustar manualmente los límites "reales" (pre-transformación) de su vista para que coincidan con el resultado final de la animación de escala.fuente
view.getLayoutParams().width = newWidth; view.getLayoutParams().height = newHeight; view.requestLayout();
. (La última llamada es necesaria para informar al árbol de vistas que debe recalcularse).android:fillEnabled
yandroid:fillAfter
que ambos sean verdaderos.En realidad, como la animación que está utilizando parece estar incrustada en el marco de Android, no estoy seguro de que pueda cambiar nada en ella.
Sin embargo, puede crear su propia animación siguiendo el ejemplo de la documentación . Y tendrás que poner android: fillAfter = "true" si quieres que la escala se mantenga después del final de la animación.
fuente
Ponga android: fillAfter = "true" en la etiqueta SET, ya que ponerlos en la etiqueta de animación los limita a los "parámetros de transición" o "durante / mientras se animan parámetros". Los parámetros en el SET aplicarán la transformación que está buscando después de que termine las animaciones.
fuente