Это можно сделать с помощью API сцен и переходов .
Framework дает нам три Transition
типов из коробки: Fade
, Slide
и Explode
, но вы также можете создать свой собственный тип перехода, расширяющий класс Visibility
и переопределяющий соответствующие методы.
Итак, имея любое ViewGroup
, мы можем сделать это:
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);
}
});
Где my_transition.xml выглядит следующим образом:
<?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>
Мы получим этот результат:
![enter image description here](https://i.stack.imgur.com/OqhOm.gif)
Обратите внимание, что мы должны выполнить TransitionManager.beginDelayedTransition()
до того, как были внесены какие-либо изменения в раскладку (то есть до вызова addView()
). Тогда об остальном позаботится каркас.
Существует также другая перегрузка TransitionManager.beginDelayedTransition(ViewGroup)
, где вам не нужно указывать, какой именно переход вы хотите применить, и система выполнит AutoTransition
анимацию, которая в основном будут исчезать и изменять границы анимированного представления.
Обновление Подведение итогов разговора в комментариях
Framework TransitionManager
доступен из API 19 и полностью поддерживается из API 21 (говоря полностью, я имею в виду, например, переход Slide
доступен из API 21). Хотя существует пакет поддержки , но он не поддерживает всю функциональность. Кроме того, вы можете перейти к библиотеке TransitionsEverywhere , которая поддерживает все до Android 4.0.