2011-06-03 11 views
6

Mi pregunta es si es posible animar un elemento en una lista de animación. En concreto, supongamos que tiene:Android animando una lista de animación

<animation-list xmlns:android="http://schemas.android.com/apk/res/android" android:oneshot="true"> 
    <item android:drawable="@drawable/rocket_thrust1" android:duration="200" /> 
    <item android:drawable="@drawable/rocket_thrust2" android:duration="200" /> 
    <item android:drawable="@drawable/rocket_thrust3" android:duration="200" /> 
</animation-list> 

Quiero desaparecer el alfa de cada <item> en lugar de simplemente saltar de una imagen a la siguiente, ¿es posible?

Respuesta

3

Tendrá que usar animaciones interpoladas para hacer esto. Esencialmente, lo que necesita hacer es tener dos objetos ImageView, uno para la imagen actual y otro para la nueva imagen. Crear dos animaciones interpoladas de res/animal/fadeout.xml:

<?xml version="1.0" encoding="utf-8"?> 
<alpha xmlns:android="http://schemas.android.com/apk/res/android" 
    android:fromAlpha="1.0" 
    android:toAlpha="0.0" 
    android:startOffset="500" 
    android:duration="500" /> 

y res/animal/fadein.xml:

<?xml version="1.0" encoding="utf-8"?> 
<alpha xmlns:android="http://schemas.android.com/apk/res/android" 
    android:fromAlpha="0.0" 
    android:toAlpha="1.0" 
    android:startOffset="500" 
    android:duration="500" /> 

A continuación, utilice un widget de ImageSwitcher para cambiar entre las vistas:

@Override 
public void onCreate(Bundle savedInstanceState) 
{ 
    super.onCreate(savedInstanceState); 
    LinearLayout ll = new LinearLayout(this); 
    ll.setOrientation(LinearLayout.VERTICAL); 
    setContentView(ll); 
    final ImageSwitcher is = new ImageSwitcher(this); 
    is.setOutAnimation(this, R.anim.fadeout); 
    is.setInAnimation(this, R.anim.fadein); 
    ImageView iv1 = new ImageView(this); 
    iv1.setImageResource(R.drawable.icon); 
    is.addView(iv1); 
    is.showNext(); 
    ll.addView(is); 

    Button b = new Button(this); 
    ll.addView(b); 

    b.setOnClickListener(new OnClickListener() 
    { 

     @Override 
     public void onClick(View v) 
     { 
      ImageView iv2 = new ImageView(MainActivity.this); 
      iv2.setImageResource(R.drawable.icon2); 
      is.addView(iv2); 
      is.showNext(); 
     } 
    }); 
} 

Hay una serie de artículos en my blog sobre animaciones interpoladas.

+0

No estoy seguro de si esto es lo que estoy buscando. Intento animar una pantalla de bienvenida mientras la aplicación descarga datos, por lo que no tengo simplemente una imagen estática. La animación contendría un mínimo de 4 imágenes, y la animación debería realizarse por sí sola. Sin interacción del usuario – tomislav2012

+0

Utilicé un botón para mantener el código simple. Puede usar un ImageSwitcher con una secuencia de fondo para cambiar periódicamente la imagen. –