Вам необходимо использовать новый android.animation
каркас (аниматоры объектов) с FragmentTransaction.setCustomAnimations
, а также FragmentTransaction.setTransition
.
Вот пример использования setCustomAnimations
из ApiDemos ' FragmentHideShow.java :
ft.setCustomAnimations(android.R.animator.fade_in, android.R.animator.fade_out);
и вот соответствующий аниматор XML из res / animator / fade_in.xml :
<objectAnimator xmlns:android="http://schemas.android.com/apk/res/android"
android:interpolator="@android:interpolator/accelerate_quad"
android:valueFrom="0"
android:valueTo="1"
android:propertyName="alpha"
android:duration="@android:integer/config_mediumAnimTime" />
Обратите внимание, что вы можете объединить несколько аниматоров, используя <set>
, так же, как вы могли бы использовать более раннюю анимационную среду.
РЕДАКТИРОВАТЬ : Поскольку люди спрашивают о включении / выключении, я прокомментирую это здесь.
Выдвижной и выдвижной
Вы, конечно, можете анимировать свойства translationX
, translationY
, x
и y
, но, как правило, слайды включают анимацию контента на экране и за его пределами. Насколько я знаю, нет никаких свойств перехода, которые используют относительные значения. Однако это не мешает вам писать их самостоятельно. Помните, что для анимации свойств просто требуются методы getter и setter для объектов, которые вы анимируете (в данном случае представлений), так что вы можете просто создать свои собственные getXFraction
и setXFraction
методы для вашего подкласса представления, как это:
public class MyFrameLayout extends FrameLayout {
...
public float getXFraction() {
return getX() / getWidth(); // TODO: guard divide-by-zero
}
public void setXFraction(float xFraction) {
// TODO: cache width
final int width = getWidth();
setX((width > 0) ? (xFraction * width) : -9999);
}
...
}
Теперь вы можете анимировать свойство xFraction, например:
Рез / аниматор / slide_in.xml
<objectAnimator xmlns:android="http://schemas.android.com/apk/res/android"
android:interpolator="@android:anim/linear_interpolator"
android:valueFrom="-1.0"
android:valueTo="0"
android:propertyName="xFraction"
android:duration="@android:integer/config_mediumAnimTime" />
Обратите внимание, что если объект, в котором вы анимируете, не имеет такой же ширины, что и его родительский объект, все будет выглядеть не совсем правильно, поэтому вам может потребоваться настроить реализацию свойства в соответствии с вашим вариантом использования.