8

Actualmente tengo un programa de Android en funcionamiento que agrega puntos de vista programáticamente a LinearLayout. Me gustaría que se animaran esos puntos de vista y no puedo encontrar ningún recurso bueno para descubrir cómo hacerlo.Android: LinearLayout addView Animation

¿Podría alguien señalarme en la dirección correcta?

Respuesta

-2

Puede usar ViewFlipper y establecer animaciones desde allí, puede echar un vistazo a este tutorial . Buena suerte.

7

Es una cuestión muy antigua, pero sigue siendo interesante: se puede utilizar el atributo android:animateLayoutChanges="true"

Por ejemplo:

<LinearLayout 

       android:orientation="horizontal" 
       android:layout_width="match_parent" 
       android:layout_height="wrap_content" 
       android:animateLayoutChanges="true" 
       /> 
4

que se pueden hacer con Scenes and Transitions API.

Marco

nos da tres tipos Transition fuera de la caja: Fade, Slide y Explode, pero también puede crear su tipo personalizado de transición que se extiende Visibility clase y métodos apropiados primordiales.

lo tanto, tener cualquier ViewGroup, podemos hacer esto:

viewGroup.setOnClickListener(new View.OnClickListener() { 
    @Override 
    public void onClick(final View v) { 
     Transition t = null; 
     if (i == 1) { 
      t = new Fade(); 
     } else if (i == 2) { 
      t = new Slide(Gravity.BOTTOM); 
     } else if (i == 3) { 
      t = TransitionInflater.from(v.getContext()) 
            .inflateTransition(R.transition.my_transition); 
     } 

     Button button = new Button(v.getContext()); 
     button.setText("My button " + i++); 

     TransitionManager.beginDelayedTransition(customLayout, t); 
     viewGroup.addView(button); 
    } 
}); 

Dónde my_transition.xml sigue:

<?xml version="1.0" encoding="utf-8"?> 
<transitionSet xmlns:android="http://schemas.android.com/apk/res/android" 
       android:duration="3000" 
       android:interpolator="@android:interpolator/fast_out_slow_in"> 

    <fade/> 
    <slide android:slideEdge="bottom"/> 

</transitionSet> 

conseguiremos este resultado:

enter image description here

Tenga en cuenta que debemos realizar TransitionManager.beginDelayedTransition() antes de realizar cualquier cambio en el diseño (es decir, antes de llamar al addView()). Entonces framework se encargará del resto.

También hay otra sobrecarga TransitionManager.beginDelayedTransition(ViewGroup), donde no es necesario especificar qué transición exacta desea aplicar, y el sistema realizará la animación AutoTransition, que básicamente se desvanecerá y cambiará los límites de la vista animada.


actualización suma arriba de conversación en los comentarios

de TransitionManager está disponible a partir de la API 19, y el pleno apoyo de la API 21 Marco (diciendo plenamente Me refiero, por ejemplo, Slide transición está disponible de API 21). Aunque existe support package available, pero no respalda todas las funciones. Alternativamente, puede pasar a la biblioteca TransitionsEverywhere, que respalda todo hasta Android 4.0.

+0

Lo quiero cuando agrego como este 'for (int i = 0; i

+0

Coloque 'TransitionManager.beginDelayedTransition()' before 'for' loop. – azizbekian

+0

Estoy tratando de agregar my_transition.xml Tengo ** @ android: interpolator/fast_out_slow_in requiere API nivel 21 (actual min es 15) ** en 'android: interpolator =" @ android: interpolator/fast_out_slow_in "' –

1

Trate

1. Añadir vista a la disposición lineal

linearLayout.addView(customView); 

2.slide_up.xml Añadir a res/anim carpeta

<?xml version="1.0" encoding="utf-8"?> 
<set xmlns:android="http://schemas.android.com/apk/res/android" 
android:fillAfter="true"> 

    <translate 
    android:duration="500" 
    android:fromYDelta="100%" 
    android:toYDelta="0%" /> 
</set> 

3. Aplicar la animación justo después de la adición de vista

Animation animation = AnimationUtils.loadAnimation(context, R.anim.slide_up); 
customView.startAnimation(animation); 

Si desea animar vistas una a una, a continuación, utilizar siguientes líneas

new Handler(Looper.getMainLooper()).postDelayed(new Runnable() { 
     @Override 
     public void run() { 
      linearLayout.addView(customView); 
      Animation animation = AnimationUtils.loadAnimation(context, R.anim.slide_up); 
      customView.startAnimation(animation); 
     } 
}, 500); 
+0

Quiero deslizar uno tras otro, pero esta diapositiva todos juntos customeview.Mi 'linearLayout.addView (customView);' agregar en el bucle –

+0

Puede agregar retraso, he actualizado la respuesta. – Pehlaj

+0

Podemos lograr eso utilizando Handler correctamente – Pehlaj