Cela peut être fait avec Scenes and Transitions API.
cadre nous donne trois types Transition
de la boîte: Fade
, Slide
et Explode
, mais vous pouvez aussi créer votre type personnalisé de transition s'étendant Visibility
classe et prépondérants des méthodes appropriées.
Ainsi, ayant une ViewGroup
, nous pouvons le faire:
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);
}
});
Où my_transition.xml suit:
<?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>
Nous allons obtenir ce résultat:

Notez que nous devons effectuer TransitionManager.beginDelayedTransition()
avant toute modification de la mise en page (c.-à-d. avant que addView()
soit appelé). Ensuite, le cadre prendra soin du reste.
Il existe également une autre surcharge TransitionManager.beginDelayedTransition(ViewGroup)
, où vous n'avez pas besoin de spécifier la transition exacte que vous souhaitez appliquer, et le système exécutera l'animation AutoTransition
, qui fondra et changera les limites de la vue animée.
Mise à jour résument de la conversation dans les commentaires
cadre de
TransitionManager
est disponible à partir de l'API 19 et entièrement pris en charge de l'API 21 (en disant bien que je veux dire par exemple Slide
transition est disponible à partir de l'API 21). Bien qu'il existe support package available, mais il ne rétroportage pas toutes les fonctionnalités. Alternativement, vous pouvez passer à TransitionsEverywhere bibliothèque, qui rétroport tout jusqu'à Android 4.0.
Je le veux quand j'ajoute comme ceci 'pour (int i = 0; i
Placez 'TransitionManager.beginDelayedTransition()' avant la boucle 'for'. – azizbekian
Je suis en train d'ajouter my_transition.xml J'ai ** ** android: interpolator/fast_out_slow_in nécessite le niveau API 21 (min actuel est 15) ** sur 'android: interpolator =" @ android: interpolator/fast_out_slow_in "' –