Cambiar la posición de la vista después del final de la animación

Desarrollo un widget basado en ViewGroup y mi problema es que necesito guardar la posición de los elementos después del final de la animación. Llamé setFillAfter(true) en mi objeto de animación que creé AnimationListener y en su método onAnimationEnd llamada View.layout(l,t,r,b) para establecer la posición después de la animación, porque quiero que la animación comience desde la posición del nuevo elemento la próxima vez . Pero en este caso parece que los artículos se han colocado dos veces. Si no utilizo View.layout(l,t,r,b) al final de la animación, la siguiente animación comienza desde la posición anterior. Aquí está mi código:

 private void scrollUp() { for(int i = 0; i < getChildCount(); i++) { final View child = getChildAt(i); final int index = i; final int newleft = child.getLeft() + mOffsetBetweenItems; final int newTop = child.getTop() - mOffsetBetweenItems; TranslateAnimation scrollUp = new TranslateAnimation(0, mOffsetBetweenItems, 0, -mOffsetBetweenItems); scrollUp.setDuration(1500); scrollUp.setFillAfter(true); scrollUp.setAnimationListener( new AnimationListener() { @Override public void onAnimationStart(Animation animation) {} @Override public void onAnimationRepeat(Animation animation) {} @Override public void onAnimationEnd(Animation animation) { child.layout(newleft, newTop, newleft + child.getMeasuredWidth(), newTop + child.getMeasuredHeight() ); } } ); child.startAnimation(scrollUp); } } 

Por favor, dame un consejo ¿cómo debo restablecer la posición de la vista en consecuencia a la posición final de la animación?

Debe utilizar ObjectAnimator , funciona desde el nivel API 11. Cambia la posición de la vista automática,

Aquí está el ejemplo

 ObjectAnimator objectAnimator= ObjectAnimator.ofFloat(mContent_container, "translationX", startX, endX); objectAnimator.setDuration(1000); objectAnimator.start(); 

Gracias JUL por su respuesta

Si su aplicación no se encuentra el object animator , cambiar el nivel de la API de Project -> properties -> Android , que import android.animation.ObjectAnimator;

Lo hice. Aquí está el código:

 private void scrollUp() { for(int i = 0; i < getChildCount(); i++) { final View child = getChildAt(i); final int index = i; final int newleft = child.getLeft() + mOffsetBetweenItems; final int newTop = child.getTop() - mOffsetBetweenItems; TranslateAnimation scrollUp = new TranslateAnimation(0, mOffsetBetweenItems, 0, -mOffsetBetweenItems); scrollUp.setDuration(1500); scrollUp.setFillEnabled(true); scrollUp.setAnimationListener( new AnimationListener() { @Override public void onAnimationStart(Animation animation) {} @Override public void onAnimationRepeat(Animation animation) {} @Override public void onAnimationEnd(Animation animation) { child.layout(newleft, newTop, newleft + child.getMeasuredWidth(), newTop + child.getMeasuredHeight() ); } } ); child.startAnimation(scrollUp); } } 

Acaba de eliminar setFillAfter(true) y escribir setFillEnabled(true) lugar de. Pero en este caso no entiendo la lógica de setFillEnabled() trabajo, ya que proporciona el comportamiento no se describe en la documentación.

Invierta su animación; Comience por dar a su vista una nueva posición y luego animar desde la posición antigua a la nueva posición.

  • NullPointerException al agregar o quitar vistas de un RelativeLayout (animaciones)
  • Quiero mostrar una animación de carga mientras se conecta a un websocket
  • animation.start () o animation.startNow () no inicia la animación inmediatamente
  • Lista de animación no funciona - muestra sólo el primer elemento
  • La vista animada de Android fuera del fragmento se está recortando
  • Animación de desplazamiento personalizado (Inclinación, Card Deck, 3D, etc.)
  • ObjectAnimator con la propiedad scale hace bg black?
  • Agitación / animación de la animación en android
  • Animación de Android: ¿Esperar hasta que termine?
  • CursorAdapter respaldado ListView eliminar animación "parpadeos" en borrar
  • Ancho de la vista no cambiado después de la escala ObjectAnimator
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.