2012-05-15 20 views
23

Tengo dos diseños lineales en los que quiero realizar dos animaciones diferentes en ambos diseños y al mismo tiempo.¿Cómo iniciar dos animaciones al mismo tiempo en Android?

Ahora está trabajando en forma secuencial. es decir, después de completar uno, comienza otro.

aquí está mi código.

Animation inFromRight = new TranslateAnimation(
        Animation.RELATIVE_TO_PARENT, +0.0f, 
        Animation.RELATIVE_TO_PARENT, 0.0f, 
        Animation.RELATIVE_TO_PARENT, 0.0f, 
        Animation.RELATIVE_TO_PARENT, 0.0f); 
      inFromRight.setDuration(500); 
      inFromRight.setInterpolator(new AccelerateInterpolator()); 

    Animation outtoLeft = new TranslateAnimation(
        Animation.RELATIVE_TO_PARENT, 0.0f, 
        Animation.RELATIVE_TO_PARENT, -1.0f, 
        Animation.RELATIVE_TO_PARENT, 0.0f, 
        Animation.RELATIVE_TO_PARENT, 0.0f); 
      outtoLeft.setDuration(500); 
      outtoLeft.setInterpolator(new AccelerateInterpolator()); 

    @Override 
     public void onClick(View v) { 
      switch (v.getId()) { 
      case R.id.menu: 
          mainLayout.startAnimation(outtoLeft); 
       sideBar.startAnimation(inFromRight);     
       break; 
      } 
     } 

outtoLeft.setAnimationListener(new AnimationListener() { 
      @Override 
      public void onAnimationStart(Animation animation) { 
      } 

      @Override 
      public void onAnimationRepeat(Animation animation) { 
      } 

      @Override 
      public void onAnimationEnd(Animation animation) { 
       mainLayout 
         .setLayoutParams(new LayoutParams(
           LayoutParams.FILL_PARENT, 
           LayoutParams.FILL_PARENT, 40)); 

      } 
     }); 

¡Gracias de antemano!

+0

¿Es todo el código? La forma en que se escriben ambas animaciones debe comenzar al mismo tiempo. –

+0

No, también tengo oyentes de animación. Después de completar una animación, realizo algunas otras operaciones de IU, ¿eso afecta ...? He actualizado el código. – Noby

Respuesta

12

creo que es necesario utilizar un AnimationSet

http://developer.android.com/reference/android/view/animation/AnimationSet.html

Desde el doc:

Represents a group of Animations that should be played together. The transformation of each individual animation are composed together into a single transform.

Este enlace tipo de espectáculos cómo se supone que un AnimationSet que se construirá/ejecutada: http://groups.google.com/group/android-developers/browse_thread/thread/9df24ac25f01cee9/6e0eac7802a541e3

+7

Creo que el conjunto de animación funciona como una combinación de animaciones, no como una animación separada en vistas separadas. – Noby

+0

Tienes razón, leí mal la pregunta y pensé que estabas realizando las animaciones en el mismo objeto. – Gophermofur

1

La manera de resolver este problema es usar un AnimatorSet con Animator objetos. Si usted está preocupado acerca de la compatibilidad hacia atrás, se puede usar la biblioteca NineOldAndroids para llevar el API de nuevo todo el camino a Android 1.0

2

En su actividad

ImageView reusableImageView = (ImageView)findViewById(R.id.imageView1); 
reusableImageView.setImageResource(R.drawable.flag); 
reusableImageView.setVisibility(View.VISIBLE); 
Animation an = AnimationUtils.loadAnimation(this, R.anim.yourAnimation); 
reusableImageView.startAnimation(an); 

Luego, en yourAnimation.xml definir todas las animaciones quiero

<set 
xmlns:android="http://schemas.android.com/apk/res/android" 
android:shareInterpolator="false"> 
<scale 
    android:pivotX="50%" 
    android:pivotY="50%" 
    android:fromXScale="1.0" 
    android:fromYScale="1.0" 
    android:toXScale="2.0" 
    android:toYScale="2.0" 
    android:duration="2500" /> 
<scale 
    android:startOffset="2500" 
    android:duration="2500" 
    android:pivotX="50%" 
    android:pivotY="50%" 
    android:fromXScale="1.0" 
    android:fromYScale="1.0" 
    android:toXScale="0.5" 
    android:toYScale="0.5" /> 
<rotate 
    android:fromDegrees="0" 
    android:toDegrees="360" 
    android:pivotX="50%" 
    android:pivotY="50%" 
    android:duration="5000" /> 
</set> 
1

Lo resolví comenzando la segunda animación en el evento AnimationStart de la primera animación. En mi ejemplo, el diseño derecho reemplaza al izquierdo, ambos se mueven hacia la izquierda al mismo tiempo. Yo uso la propiedad animada de una clase de Vista http://developer.android.com/reference/android/view/View.html#animate() que está disponible al iniciar la API v.12

leftLayout.animate() 
    .translationX(-leftLayout.getWidth()) // minus width 
    .setDuration(300) 
    .setListener(new AnimatorListenerAdapter() { 
     @Override 
     public void onAnimationStart(Animator animation) { 
      rightLayout.animate() 
        .translationX(-leftLayout.getWidth()) // minus width 
        .setDuration(300) 
        .setListener(new AnimatorListenerAdapter() { 
         @Override 
         public void onAnimationEnd(Animator animation) { 
          leftLayout.setVisibility(View.GONE); 
          leftLayout.setTranslationX(0f); // discarding changes 
          rightLayout.setTranslationX(0f); 
         } 
        }); 
     } 
}); 
Cuestiones relacionadas