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:
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.
Lo voglio quando aggiungo in questo modo 'for (int i = 0; i
Posiziona 'TransitionManager.beginDelayedTransition()' prima di 'for' loop. – azizbekian
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 "' –