Android фрагменты и анимация
Как вы должны реализовать вид скольжения, который, например, использует клиент Honeycomb Gmail?
Can TransactionManager обрабатывайте это автоматически, добавляя и удаляя фрагменты, это довольно сложно проверить из-за того, что эмулятор является слайд-шоу :)
5 ответов:
для анимации перехода между фрагментами или для анимации процесса отображения или скрытия фрагмента вы используете
Fragment ManagerсоздатьFragment Transaction.в каждой транзакции можно указать фрагмент и анимации, которые будут использоваться для отображения и скрытия соответственно (при замена).
следующий код показывает, как вы заменили бы фрагмент, сдвинув один фрагмент и сдвинув другой в нем место.
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();чтобы достичь того же самого, скрывая или показывая фрагмент, который вы просто называете
ft.showилиft.hide, передав фрагмент, который вы хотите показать или скрыть соответственно.для справки, определения анимации XML будет использовать
objectAnimatorтег. Пример slide_in_left может выглядеть примерно так:<?xml version="1.0" encoding="utf-8"?> <set> <objectAnimator xmlns:android="http://schemas.android.com/apk/res/android" android:propertyName="x" android:valueType="floatType" android:valueFrom="-1280" android:valueTo="0" android:duration="500"/> </set>
Если вам не нужно использовать библиотеку поддержки, то посмотрите на Романа!--10--> ответ.
но если вы хотите использовать библиотека вы должны использовать старую структуру анимации, как описано ниже.
после консультации Рето это и blindstuff это!--10--> ответы я получил следующий код работает.
фрагменты появляются скольжение справа и скольжение влево при нажатии кнопки Back.
FragmentManager fragmentManager = getSupportFragmentManager(); FragmentTransaction transaction = fragmentManager.beginTransaction(); transaction.setCustomAnimations(R.anim.enter, R.anim.exit, R.anim.pop_enter, R.anim.pop_exit); CustomFragment newCustomFragment = CustomFragment.newInstance(); transaction.replace(R.id.fragment_container, newCustomFragment ); transaction.addToBackStack(null); transaction.commit();порядок важен. это означает, что вы должны называть
setCustomAnimations()доreplace()или анимация не вступит в силу!далее эти файлы должны быть размещены внутри тегов res / anim папка.
enter.xml:
<?xml version="1.0" encoding="utf-8"?> <set> <translate xmlns:android="http://schemas.android.com/apk/res/android" android:fromXDelta="100%" android:toXDelta="0" android:interpolator="@android:anim/decelerate_interpolator" android:duration="@android:integer/config_mediumAnimTime"/> </set>выход.xml:
<set> <translate xmlns:android="http://schemas.android.com/apk/res/android" android:fromXDelta="0" android:toXDelta="-100%" android:interpolator="@android:anim/accelerate_interpolator" android:duration="@android:integer/config_mediumAnimTime"/> </set>pop_enter.xml:
<set> <translate xmlns:android="http://schemas.android.com/apk/res/android" android:fromXDelta="-100%" android:toXDelta="0" android:interpolator="@android:anim/decelerate_interpolator" android:duration="@android:integer/config_mediumAnimTime"/> </set>pop_exit.xml:
<?xml version="1.0" encoding="utf-8"?> <set> <translate xmlns:android="http://schemas.android.com/apk/res/android" android:fromXDelta="0" android:toXDelta="100%" android:interpolator="@android:anim/accelerate_interpolator" android:duration="@android:integer/config_mediumAnimTime"/> </set>продолжительность анимации может быть изменена на любое из значений по умолчанию, таких как
@android:integer/config_shortAnimTimeили любой другой номер.обратите внимание, что если между заменами фрагментов происходит изменение конфигурации (например, вращение), то действие назад не анимировано. Это же документированная ошибка который все еще существует в rev 20 библиотеки поддержки.
пожалуйста, используйте это я думаю, что гораздо лучшие решения.Android Studio по умолчанию
animation.fragmentTransaction.setCustomAnimations (android.Р. аним.slide_in_left, android.Р. аним.slide_out_right);
FragmentManager fragmentManager = getSupportFragmentManager(); FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction(); fragmentTransaction.setCustomAnimations(android.R.anim.slide_in_left, android.R.anim.slide_out_right); fragmentManager.addOnBackStackChangedListener(this); fragmentTransaction.replace(R.id.frame, firstFragment, "h"); fragmentTransaction.addToBackStack("h"); fragmentTransaction.commit();выход:
новое библиотека поддерживает использование обоих видов анимации (т. е.
<translate>, <rotate>) и аниматоры объектов (т. е.<objectAnimator>) для перехода фрагмента. Он реализован с помощью NineOldAndroids. Дополнительную информацию см. В моей документации по github.
