8

Ich habe derzeit ein funktionierendes Android-Programm, das programmatisch Ansichten zu einem LinearLayout hinzufügt. Ich möchte, dass diese Ansichten animiert werden und keine guten Ressourcen finden, um herauszufinden, wie das geht.Android: LinearLayout addView Animation

Könnte mir jemand in die richtige Richtung zeigen?

Antwort

-2

Sie können ViewFlipper verwenden und Animationen von dort setzen, können Sie einen Blick auf diese tutorial werfen. Viel Glück.

7

Es ist eine sehr alte Frage, aber immer noch interessant:

<LinearLayout 

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

getan werden kann, mit Scenes and Transitions API: das Attribut android:animateLayoutChanges="true"

Zum Beispiel verwenden können.

Rahmen geben uns drei Transition Typen aus der Box: Fade, Slide und Explode, aber Sie können auch Ihre individuelle Art des Übergangs erstreckt Visibility Klasse und überwiegender geeigneter Methoden erstellen.

So hat jeder ViewGroup, können wir dies tun:

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

Wo my_transition.xml folgt:

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

Wir werden dieses Ergebnis:

enter image description here

Beachten Sie, dass wir TransitionManager.beginDelayedTransition() ausführen müssen, bevor Änderungen am Layout vorgenommen wurden (d. H. vor addView() heißt). Dann kümmert sich Framework um den Rest.

Es gibt auch eine andere Überlastung TransitionManager.beginDelayedTransition(ViewGroup), wo Sie nicht angeben müssen, welche genaue Übergang angewendet werden soll, und das System wird AutoTransition Animation ausführen, die im Grunde wird verblassen und Grenzen der animierten Ansicht ändern.


aktualisiert Summe von Unterhaltung bis in den Kommentaren

Framework TransitionManager von API 19 zur Verfügung steht, und voll von API 21 unterstützt (mit den Worten voll meine ich zum Beispiel Slide Übergang von API 21 zur Verfügung). Es gibt zwar support package available, aber es werden nicht alle Funktionen rückportiert. Alternativ können Sie auch in die Bibliothek TransitionsEverywhere wechseln, die alles bis zu Android 4.0 zurückspeichert.

+0

Ich will es, wenn ich wie folgt hinzufügen 'für (int i = 0; i

+0

Platzieren Sie TransitionManager.beginDelayedTransition() 'vor' for' loop. – azizbekian

+0

Ich versuche my_transition.xml hinzuzufügen Ich habe ** @ android: interpolator/fast_out_slow_in erfordert API level 21 (aktuelle min ist 15) ** auf 'android: interpolator =" @ android: interpolator/fast_out_slow_in "' –

1

Versuchen

1. view In den linearen Layout

linearLayout.addView(customView); 

2. hinzufügen slide_up.xml-res/anim Ordner

<?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. Anwenden Animation direkt nach Ansicht Hinzufügen

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

Wenn Sie Ansichten eins nach dem anderen animieren möchten, dann folgenden Zeilen verwenden

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

Ich möchte eine nach der anderen schieben, aber diese Folie alle customeview zusammen.Meine lineareLayout.addView (customView); hinzufügen Schleife –

+0

Sie können Verzögerung hinzufügen, habe ich die Antwort aktualisiert. – Pehlaj

+0

Wir können das erreichen, indem wir Handler richtig benutzen – Pehlaj