Я пытаюсь оживить переход между фрагментами. Я получил ответ от следующих
фрагментов Android и анимации
FragmentTransaction ft = getFragmentManager().beginTransaction();
ft.setCustomAnimations(R.anim.slide_in_left, R.anim.slide_out_right);
DetailsFragment newFragment = DetailsFragment.newInstance();
ft.replace(R.id.details_fragment_container, newFragment, "detailFragment");
// Start the animated transition.
ft.commit();
И мой R.anim.slide_in_left
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
<translate android:fromXDelta="50%p" android:toXDelta="0"
android:duration="@android:integer/config_mediumAnimTime"/>
<alpha android:fromAlpha="0.0" android:toAlpha="1.0"
android:duration="@android:integer/config_mediumAnimTime" />
</set>
Но когда я попробовал это, это показало
02-08 16:27:37.961: ERROR/AndroidRuntime(1717): FATAL EXCEPTION: main
02-08 16:27:37.961: ERROR/AndroidRuntime(1717): java.lang.RuntimeException: Unknown animator name: translate
02-08 16:27:37.961: ERROR/AndroidRuntime(1717): at android.animation.AnimatorInflater.createAnimatorFromXml(AnimatorInflater.java:129)
02-08 16:27:37.961: ERROR/AndroidRuntime(1717): at android.animation.AnimatorInflater.createAnimatorFromXml(AnimatorInflater.java:126)
02-08 16:27:37.961: ERROR/AndroidRuntime(1717): at android.animation.AnimatorInflater.createAnimatorFromXml(AnimatorInflater.java:93)
02-08 16:27:37.961: ERROR/AndroidRuntime(1717): at android.animation.AnimatorInflater.loadAnimator(AnimatorInflater.java:72)
02-08 16:27:37.961: ERROR/AndroidRuntime(1717): at android.app.FragmentManagerImpl.loadAnimator(FragmentManager.java:621)
02-08 16:27:37.961: ERROR/AndroidRuntime(1717): at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:733)
02-08 16:27:37.961: ERROR/AndroidRuntime(1717): at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:919)
02-08 16:27:37.961: ERROR/AndroidRuntime(1717): at android.app.BackStackRecord.run(BackStackRecord.java:578)
02-08 16:27:37.961: ERROR/AndroidRuntime(1717): at android.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1217)
Любые идеи? Когда я проверил Honeycomb API, ссылка translate
есть. Что я пропустил?
Есть ли другой способ оживить переход между фрагментами? Спасибо
android
android-3.0-honeycomb
Лабиб Панампуллан
источник
источник
Ответы:
Вам нужно использовать новый
android.animation
каркас (объектные аниматоры) сFragmentTransaction.setCustomAnimations
а такжеFragmentTransaction.setTransition
.Вот пример использования
setCustomAnimations
из FragmentHideShow.java из ApiDemos :и вот соответствующий аниматор XML из res / animator / fade_in.xml :
Обратите внимание, что вы можете комбинировать несколько аниматоров, используя
<set>
обычную анимационную среду.РЕДАКТИРОВАТЬ : Поскольку люди спрашивают о слайд-ин / слайд-аут, я прокомментирую это здесь.
Выдвижной и выдвижной
Вы , конечно , можете анимировать
translationX
,translationY
,x
иy
свойства, но , как правило слайды включают анимацию содержимого с вне экрана. Насколько я знаю, нет никаких свойств перехода, которые используют относительные значения. Однако это не мешает вам писать их самостоятельно. Помните, что для анимации свойств просто требуются методы getter и setter для объектов, которые вы анимируете (в данном случае представлений), поэтому вы можете просто создать свои собственные методыgetXFraction
иsetXFraction
методы в подклассе представления, например так:Теперь вы можете анимировать свойство 'xFraction', например так:
res / animator / slide_in.xml :
Обратите внимание, что если объект, в котором вы анимируете, не такой же ширины, как его родительский объект, все будет выглядеть не совсем правильно, поэтому вам может потребоваться настроить реализацию свойства в соответствии с вашим вариантом использования.
источник
Я сделал так:
Добавьте этот метод для замены фрагментов с анимацией :
Вы должны добавить четыре анимации в папку anim, которая связана с ресурсом :
enter_from_left.xml :
exit_to_right.xml :
enter_from_right.xml :
exit_to_left.xml :
Вывод:
Его Готово .
источник
.setCustomAnimations(R.anim.enter_from_right, R.anim.exit_to_left, R.anim.enter_from_left, R.anim.exit_to_right)
Если вы можете позволить себе привязать себя только к Lollipop и позже, это, кажется, делает свое дело:
Надеюсь это поможет.
источник
new Slide(...)
: вызов требует API уровня 21Ответ Нурика был очень полезным, но я не мог заставить его работать, пока не нашел это . Короче говоря, если вы используете библиотеку совместимости (например, SupportFragmentManager вместо FragmentManager), синтаксис файлов анимации XML будет другим.
источник
Вот анимация слайдов между фрагментами:
Мы используем объектAnimator.
Вот два XML-файла в подпапке аниматора .
enter_anim.xml
exit_anim.xml
Я надеюсь, что это поможет кому-то.
источник
.setCustomAnimations(R.animator.slide_in_left, R.animator.slide_out_right, R.animator.slide_in_left, R.animator.slide_out_right)
Для всех, кого поймают, убедитесь, что setCustomAnimations вызывается перед вызовом для замены / добавления при построении транзакции.
источник
Реализация FragmentTransaction в Android SDK требует
Animator
поддержки библиотекиAnimation
, не спрашивайте меня, почему, но после комментария странного лука я изучил код Android 4.0.3 и библиотеку поддержки. Android SDK используетloadAnimator()
и поддерживает использование библиотекиloadAnimation()
источник
Попробуйте использовать это простое и быстрое решение. Android предоставляет некоторые значения по умолчанию
animation
.Вывод:
источник