Animación con animationSet () en android

OK aquí está el problema que tengo un ImageView en mi actividad, aquí es lo que parece en main.xml:

<ImageView android:id="@+id/ic" android:layout_width="wrap_content" android:layout_height="wrap_content" android:src="@drawable/icon" android:layout_gravity="center_horizontal"/> 

Quiero que esta imagen se mueva -200 (izquierda) y luego a 100 (derecha) y luego de nuevo a 0 con efecto de rebote.

He implementado esto con mi código:

 as = new AnimationSet(true); as.setFillEnabled(true); as.setInterpolator(new BounceInterpolator()); TranslateAnimation ta = new TranslateAnimation(-300, 100, 0, 0); ta.setDuration(2000); as.addAnimation(ta); AnimationSet sa = new AnimationSet(true); sa.setFillEnabled(true); sa.setInterpolator(new DecelerateInterpolator()); TranslateAnimation ta2 = new TranslateAnimation(100, 0, 0, 0); ta2.setDuration(2000); sa.addAnimation(ta2); as.addAnimation(sa); 

Puedes ver en el código la transición de X que quiero (-300,100) entonces (100, 0)

Sin embargo, la imagen no se mueve como debería, en lugar de ello sólo se detiene en 100 y luego rebotando …

Hmmm …., ¿saben ustedes qué está mal o qué debo hacer para lograr esto?

Si no me equivoco, estás filmando una secuencia de animaciones.

Curiosamente, una vez que inicie un AnimationSet, todas las animaciones añadidas se ejecutan simultáneamente y no secuencialmente; Por lo tanto, necesitas setStartOffset (offSet largo) para cada animación que sigue a la primera animación.

Tal vez algo como esto funcionará …

 as = new AnimationSet(true); as.setFillEnabled(true); as.setInterpolator(new BounceInterpolator()); TranslateAnimation ta = new TranslateAnimation(-300, 100, 0, 0); ta.setDuration(2000); as.addAnimation(ta); TranslateAnimation ta2 = new TranslateAnimation(100, 0, 0, 0); ta2.setDuration(2000); ta2.setStartOffset(2000); // allowing 2000 milliseconds for ta to finish as.addAnimation(ta2); 

Te sugiero que utilices ObjectAnimator. Es muy fácil implementar su caso. Su animación puede verse así:

 ObjectAnimator animator1 = ObjectAnimator.ofFloat(targetView, "translationX", -200f); animator1.setRepeatCount(0); animator1.setDuration(1000); ObjectAnimator animator2 = ObjectAnimator.ofFloat(targetView, "translationX", 100f); animator2.setRepeatCount(0); animator2.setDuration(1000); ObjectAnimator animator3 = ObjectAnimator.ofFloat(targetView, "translationX", 0f); animator3.setRepeatCount(0); animator3.setDuration(1000); //sequencial animation AnimatorSet set = new AnimatorSet(); set.play(animator1).before(animator2); set.play(animator2).before(animator3); set.start(); 

Si no estás familiarizado con ObjectAnimator, puedes comprobar este tutorial de ejemplo de android:

Ejemplo de animación de Android View

Algo como esto es muy fácil en 3.0 y superior. Aquí hay dos enlaces que he utilizado para lograr algo similar.

http://android-developers.blogspot.com/2011/02/animation-in-honeycomb.html

http://developer.android.com/reference/android/animation/AnimatorSet.Builder.html

  • Comprobar si AnimatorSet ha terminado la animación?
  • Efecto de desplazamiento con múltiples visualizadores
  • Android: animación de tween de un mapa de bits
  • Utilizar un ValueAnimator para hacer que un TextView parpadee diferentes colores
  • Propiedades de Android que se pueden animar con ObjectAnimator
  • Cómo obtener la duración de un archivo MP3 en Android
  • Android: Flip Animation utilizando XML para animación en android
  • Cómo crear movimiento / cambiar el tamaño de las animaciones en Android?
  • Crear Revelación Circular para Dispositivos Pre-Lollipop
  • Animación de Android - Estado de vista inicial
  • Diálogo de progreso personalizado con la rotación de imagen Squre con AsynTask
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.