2011-07-13 10 views
5

tengo añadir un ViewFlipper en la que tiene 2 LinearLayout, y he hecho un xml animación: left_in.xml:Android: ViewFlipper animación

<?xml version="1.0" encoding="utf-8"?> 
<set xmlns:android="http://schemas.android.com/apk/res/android"> 
<translate android:fromXDelta="-100%p" android:toXDelta="0" android:duration="3000"/> 
</set> 

right_out.xml:

<?xml version="1.0" encoding="utf-8"?> 
<set xmlns:android="http://schemas.android.com/apk/res/android"> 
<translate android:fromXDelta="0" android:toXDelta="100%p" android:duration="3000"/> 
</set> 

left_out .xml:

<?xml version="1.0" encoding="utf-8"?> 
<set xmlns:android="http://schemas.android.com/apk/res/android"> 
<translate android:fromXDelta="0" android:toXDelta="-100%p" android:duration="3000"/> 
</set> 

right_in.xml:

<?xml version="1.0" encoding="utf-8"?> 
<set xmlns:android="http://schemas.android.com/apk/res/android"> 
<translate android:fromXDelta="100%p" android:toXDelta="0" android:duration="3000"/> 
</set> 

el botón "Siguiente" en un LinearLayout que muestra la primera vez que cargue la aplicación:

mNext.setOnClickListener(new View.OnClickListener(){ 

      public void onClick(View v) { 
       // TODO Auto-generated method stub 
       mViewFlipper = (ViewFlipper)findViewById(R.id.viewFlipper1); 
       //mViewFlipper.setAnimation(AnimationUtils.loadAnimation(v.getContext(), R.anim.left_in)); 
       mViewFlipper.setInAnimation(AnimationUtils.loadAnimation(v.getContext(), R.anim.left_in)); 
       mViewFlipper.setOutAnimation(AnimationUtils.loadAnimation(v.getContext(), R.anim.right_out)); 
       mViewFlipper.showNext(); 
      } 

     }); 

y el botón "Anterior":

mPrev.setOnClickListener(new View.OnClickListener(){ 
     public void onClick(View v) { 
      // TODO Auto-generated method stub 
      mViewFlipper = (ViewFlipper)findViewById(R.id.viewFlipper1); 
      mViewFlipper.setOutAnimation(AnimationUtils.loadAnimation(v.getContext(), R.anim.right_in)); 
      mViewFlipper.setInAnimation(AnimationUtils.loadAnimation(v.getContext(), R.anim.left_out)); 
      mViewFlipper.showPrevious(); 
     }  
    }); 

el botón "siguiente" va bien, Pero el botón "Anterior" resulta extraño: cuando hago clic en "prev", primero cambia a la vista anterior y luego comienza la animación, ¡y finalmente vuelve a la vista anterior! ¿¿Cómo resolverlo?? ¡Gracias de antemano!

Respuesta

5
+0

Pero cuando presiono el otro botón (que muestra el Anterior), se vuelve extraño: la vista actual cambia a la anterior y luego comienza la animación! ¿Por qué? –

+0

¿Se puede publicar el código actualizado para cada botón? –

+0

Sí, ¡he actualizado mi código anterior! –

4

Bueno, esta es una publicación muy antigua. pero aún la solución está aquí:

necesita llamar al viewFlipper.setOutAnimation(null) y viewFlipper.setInAnimation(null) para restablecer la animación.

@Override 
     public void onClick(View v) 
     { 
     if (v.equals(mNext)) 
     { 
      mViewFlipper.setOutAnimation(null); 

      mViewFlipper.setInAnimation(null); 
       mViewFlipper.setInAnimation(AnimationUtils.loadAnimation(v.getContext(), R.anim.left_in)); 

     vf.setOutAnimation(AnimationUtils.loadAnimation(v.getContext(), R.anim.right_out)); 

      mViewFlipper.showNext(); 

     } 
     else if (v.equals(mPrev)) 
     { 

      mViewFlipper.setOutAnimation(null); 

      mViewFlipper.setInAnimation(null); 

      mViewFlipper.setInAnimation(AnimationUtils.loadAnimation(v.getContext(), R.anim.right_in)); 

     mViewFlipper.setOutAnimation(AnimationUtils.loadAnimation(v.getContext(), R.anim.left_out)); 

      mViewFlipper.showPrevious(); 
     } 

     } 
Cuestiones relacionadas