¿Cómo puedo animar una vista en Android y tener que permanecer en la nueva posición/tamaño?

Actualmente tengo una vista en mi app de Android y a la vista está jugando un fotograma de la animación. Quiero animar a la vista para aumentar su tamaño hasta el 150%. Cuando me aplican una escala de animación, y la escala de animación se ha completado, quiero la opinión de permanecer en ese nuevo tamaño para el resto de la actividad del ciclo de vida. Por desgracia, ahora cuando la escala de animación se completa, la vista se ajusta volver al tamaño original. ¿Cómo puedo conseguir que se mantenga el nuevo animado tranformation?

Estoy usando

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

Gracias!

InformationsquelleAutor justinl | 2010-07-27

7 Kommentare

  1. 148

    Asegúrese de agregar a continuación los atributos de la elemento raíz en su animación xml:

    android:fillAfter="true" 
    android:fillEnabled="true"
    • Esta es la verdadera respuesta. El OP debe cambiar para ser aceptado respuesta. Gracias Qlimax!! (P. S. esto no está documentado en la «Animación» de la sección de desarrollo de la Guía, que está documentada sólo en los javadocs para la clase de Animación. Dicha documentación pobre!)
    • donde poner este código? en <set ...></set> o en la animación de las etiquetas(translate|rotate|scale)?
    • como se menciona a continuación, usted tiene que añadir al conjunto de parámetro
    • Esto no funciona. Quiero la vista real de cambio de tamaño con la animación. Sólo se cambia el contenido. Voy a cambiar de escala Y de 1.0 0.0 y la animación que sucede, pero deja un espacio vacío, donde la vista que solía ser. También, traté de Ver.Se han IDO, pero que se ajusta a la de otros puntos de vista en el vacío del espacio. Tengo la necesidad de otros puntos de vista para seguir la escala de la vista de tamaño, mientras que se reduce. Cómo conseguir que funcione?
    • Cualquier otro que lea esto se observó que fillAfter sólo mantiene la vista píxeles estancia, mientras que la vista real todavía en posición inicial. Usted necesidad de establecer manualmente LayoutParams de su punto de vista, probablemente, en onAminationEnd (el que escucha).
    • Esto puede crear problemas de evento táctil. consulte stackoverflow.com/questions/4728908/…
    • Este atributo no es necesario: android:fillEnabled=»true». Esto es necesario para este atributo: android:fillBefore. Mira esto: developer.android.com/reference/android/view/animation/….

  2. 52

    trate de la construcción de la animación de código y la configuración de las propiedades de este

    anim.setFillEnabled(true);
    anim.setFillAfter(true);
    • pero hay que crear un nuevo problema, puedo recibir eventos de toque en él.stackoverflow.com/questions/4728908/…
  3. 30

    si quieres poner tu animación en un archivo xml, es posible que necesite esta ayuda:

    <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 apreciar la otra respuesta,
    me ayudó 🙂 buena suerte!

  4. 19

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

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

    (En este fragmento ViewPropertyAnimator ha sido utilizado).

    No es posible anexar otras múltiples opciones.

    La Vista se encuentra en la nueva posición.

    • Este debe ser publicado como trending topic
  5. 2

    EDICIÓN: Qlimax la respuesta es mejor, pero desde que el OP no ha vuelto a cambiar la marca de verificación y no puedo borrar aceptado la respuesta, voy a copiar aquí: acaba de establecer fillAfter=true fillEnabled=true

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

    Para que las cosas funcionen como se esperaba después de la animación, al menos de acuerdo a este hilo, usted tendrá que escribir un onAnimationEnd controlador, y allí, ajustar manualmente la «real» (pre-transformación) de los límites de su vista para que coincida con el resultado final de la escala de animación.

    • Hola Walter. He sobreescrito el onAnimationEnd, pero no sé cómo ajustar el «real» de los límites de la vista para que coincida con la escala de la animación. Yo no sé qué dp quiero terminar, pero no puedo encontrar la función de «setWidth()» o «setHeight()».
    • Creo que esas son almacenados en el LayoutParams. Usted debe ser capaz de hacer view.getLayoutParams().width = newWidth; view.getLayoutParams().height = newHeight; view.requestLayout();. (La última llamada es necesario informar a la vista de árbol que necesita ser recalculada.)
    • oh excelente 😀 gracias! Esta es una gran
    • Esta es una increíble manera indirecta de hacer las cosas. Todo lo que uno necesita hacer es ajustar los atributos de android:fillEnabled y android:fillAfter a ser cierto.
  6. 1

    Realidad, ya que la animación está utilizando, parece ser uno de ellos integrado en el marco Android, no estoy seguro de que se puede cambiar nada en ella.

    Sin embargo, usted puede crear sus propias animación siguiendo en el ejemplo de la documentación. Y usted tendrá que poner android:fillAfter=»true» si desea que la escala se mantuvo después de la final de la animación.

    • scaleUp150 es una animación personalizada escribí en xml (aunque es muy básico). Me hizo poner el android:fillAfter=»true» en el interior de la animación, pero todavía se ajuste al tamaño original :S
  7. 1

    Poner android:fillAfter=»true» en el CONJUNTO de la etiqueta – como poner en la etiqueta de animación límites a la transición «parámetros» o «durante el/, mientras que la animación de los parámetros». Los parámetros en el CONJUNTO de aplicar la transformación que está buscando después de que termine la animación.

Kommentieren Sie den Artikel

Bitte geben Sie Ihren Kommentar ein!
Bitte geben Sie hier Ihren Namen ein

Pruebas en línea