¿Cómo iniciar la animación de Android desde los valores donde se detuvo?
Tengo una vista de la imagen en la cual aplico una animación de la rotación. La animación funciona bien. Al tocar hacia abajo, intento detener la animación de rotación usando cancel (), restableciendo la animación usando reset () y borrando la animación en la vista usando clearAnimation (). Pero la animación vuelve a la posición original. ¿Cómo detener la animación con los valores que era cuando sucede el evento táctil y reiniciar desde donde se detuvo?
Mi animación se define en el xml como se muestra a continuación
- Cómo animar un elemento de la lista de capas
- ¿Cómo puedo programar una animación circular rotatoria como esta (foto adjunta)? Androide
- AlphaAnimation no funciona
- SwipeRefreshLayout sin animación en la creación de fragmentos
- ¿Es posible tener un dibujo animado?
<?xml version="1.0" encoding="utf-8"?> <rotate xmlns:android="http://schemas.android.com/apk/res/android" android:fromDegrees="360" android:toDegrees="0" android:pivotX="50%" android:pivotY="50%" android:fillAfter="true" android:fillEnabled="true" android:duration="200000" android:repeatMode="restart" android:repeatCount="infinite" android:interpolator="@android:anim/linear_interpolator"/>
Estoy intentando parar la animación usando el código siguiente
private void stopAnimation(){ mRotateAntiClockwiseAnimation.cancel(); mRotateAntiClockwiseAnimation.reset(); imageView.clearAnimation(); mRotateAntiClockwiseAnimator.end(); mRotateAntiClockwiseAnimator.cancel(); stopAnimationForImageButton(); }
Estoy configurando la animación en mi vista usando el siguiente código
mRotateAntiClockwiseAnimation = AnimationUtils.loadAnimation(context, R.anim.rotate_anticlockwise); mRotateAntiClockwiseAnimation.setFillEnabled(true); mRotateAntiClockwiseAnimation.setFillAfter(true); imageView.setAnimation(mRotateAntiClockwiseAnimation); mRotateAntiClockwiseAnimation.startNow(); imageView.invalidate();
Como u ver, incluso utilizando cancel () o reset () no ayudó a detener la animación en el punto donde fue tocado hacia abajo. Cualquier puntero podría ayudar
- Agregar transición a un AnimationDrawable
- Animar cada elemento de ListView al mostrar
- Disable Window resize Animation en Android
- IOS como sobre el efecto de desplazamiento en Android
- Inicio de la animación marco por cuadro
- Android Lollipop's BeginDelayedTransition no siempre funciona
- Cómo mover y desvanecer cualquier vista con animación
- Animar el ancho de cambio de android RelativeLayout
Creo que lo conseguí trabajando iniciando el animador y luego estableciendo el currentPlayTime (). La documentación claramente dice (que acabo de tropezar con) que si la animación no ha sido iniciado, el juego de currentPlayTime utilizando este método no avanzará el delantero!
Establece la posición de la animación en el punto especificado en el tiempo. Este tiempo debe estar entre 0 y la duración total de la animación, incluyendo cualquier repetición. Si la animación aún no se ha iniciado, entonces no avanzará después de que se establezca en este momento; Simplemente ajustará el tiempo a este valor y realizará las acciones apropiadas basadas en ese tiempo. Si la animación ya se está ejecutando, entonces setCurrentPlayTime () ajustará el tiempo de reproducción actual a este valor y continuará jugando desde ese punto. http://developer.android.com/reference/android/animation/ValueAnimator.html#setCurrentPlayTime(long)
private void stopAnimation(){ mCurrentPlayTime = mRotateAntiClockwiseAnimator.getCurrentPlayTime(); mRotateAntiClockwiseAnimator.cancel(); } private void startAnimation() { mRotateAntiClockwiseAnimator.start(); mRotateAntiClockwiseAnimator.setCurrentPlayTime(mCurrentPlayTime); }
La función de pausa se ha añadido en el nivel API 19. Aquí puede leer cómo implementarlo. Este método utiliza ObjectAnimator que no es mucho más complicado que la clase de animación usual que usas. Sin embargo, hay otro truco alternativo que puede ser útil.
Con los mejores deseos.
- Ubicación Actualizaciones de ubicación de solicitudes de cliente con extras parcelables en PendingIntent
- Enfocar lento en Nexus 6 con cámara2 API