8

Attualmente ho un programma Android funzionante che aggiunge le viste a un LinearLayout a livello di programmazione. Vorrei che quelle viste fossero animate e non trovassi alcuna buona risorsa per capire come farlo.Android: LinearLayout addView Animazione

Qualcuno potrebbe indicarmi la giusta direzione?

risposta

-2

È possibile utilizzare ViewFlipper e impostare le animazioni da lì, è possibile dare un'occhiata a questo tutorial . In bocca al lupo.

7

E 'una domanda molto vecchio, ma comunque interessante: è possibile utilizzare l'attributo android:animateLayoutChanges="true"

Ad esempio:

<LinearLayout 

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

che può essere fatto con Scenes and Transitions API.

quadro ci dà tre tipi Transition fuori dalla scatola: Fade, Slide e Explode, ma è anche possibile creare il tipo personalizzato di transizione che si estende Visibility classe e metodi appropriati imperativi.

Quindi, aventi una ViewGroup, siamo in grado di fare questo:

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); 
    } 
}); 

Dove my_transition.xml è la seguente:

<?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> 

Otterremo questo risultato:

enter image description here

Si noti che è necessario eseguire TransitionManager.beginDelayedTransition() prima di apportare qualsiasi modifica al layout (ad es. prima che venga chiamato addView()). Quindi il framework si prenderà cura di tutto il resto.

C'è anche un altro sovraccarico TransitionManager.beginDelayedTransition(ViewGroup), in cui non è necessario specificare quale transizione esatta si desidera applicare e il sistema eseguirà l'animazione AutoTransition, che in pratica dissolverà e modificherà i limiti della vista animata.


Aggiornamento somma dal conversazione nei commenti

di TransitionManager è disponibile da API 19, e pienamente supportato da API 21 quadro (dicendo completamente intendo per esempio Slide transizione è disponibile da API 21). Sebbene sia presente support package available, ma non esegue il backport di tutte le funzionalità. In alternativa, è possibile passare alla libreria TransitionsEverywhere, che esegue il backport di tutto su Android 4.0.

+0

Lo voglio quando aggiungo in questo modo 'for (int i = 0; i

+0

Posiziona 'TransitionManager.beginDelayedTransition()' prima di 'for' loop. – azizbekian

+0

Sto cercando di aggiungere my_transition.xml Ho ottenuto ** @ android: interpolator/fast_out_slow_in richiede il livello API 21 (corrente min è 15) ** su 'android: interpolator =" @ android: interpolator/fast_out_slow_in "' –

1

Prova

1. Aggiungere vista Layout lineare

linearLayout.addView(customView); 

2. Aggiungi slide_up.xml-res/anim cartella

<?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. applicare l'animazione a destra dopo l'aggiunta di vista

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

Se si desidera animare opinioni uno per uno, quindi utilizzare righe seguenti

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

Voglio scorrere verso l'alto uno dopo l'altro, ma questo fa scivolare tutta la vista personalizzata insieme.Mio 'linearLayout.addView (customView);' aggiungi loop –

+0

Puoi aggiungere ritardo, ho aggiornato la risposta. – Pehlaj

+0

Possiamo ottenere ciò usando correttamente l'Handler – Pehlaj

Problemi correlati