Анимация фрагментации транзакций в котлине [дубликат]

У меня нет опыта работы с Django, но концепции от front-end до back-end и front-end framework до рамки одинаковы.

  1. React будет потреблять ваш API Django REST . Передние и задние концы никак не связаны. React выполнит HTTP-запросы к вашему REST API для извлечения и установки данных.
  2. Реагировать с помощью Webpack (модуль-расслоение) & amp; Babel (transpiler), свяжет и преобразует ваш Javascript в один или несколько файлов, которые будут размещены на странице входа HTML. Изучите Webpack, Babel, Javascript и React и Redux (контейнер состояния). I полагаю, что вы не будете использовать шаблоны Django, но вместо этого разрешите React отображать интерфейс.
  3. Когда эта страница отображается, React будет использовать API для извлечения данных, чтобы React может сделать это. Ваше понимание HTTP-запросов, Javascript (ES6), Promises, Middleware и React имеет важное значение здесь.

Вот несколько вещей, которые я нашел в Интернете, что должен (на основе быстрого поиска Google):

Надеюсь, что это направит вас в правильном направлении! Удачи! Надеюсь, что другие специалисты, специализирующиеся в Django, могут добавить к моему ответу.

244
задан Programmer Bruce 29 May 2011 в 07:48
поделиться

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>
358
ответ дан Reto Meier 21 August 2018 в 01:52
поделиться
  • 1
    Когда я попробовал это, он показывал RuntimeException: Неизвестное имя аниматора: translate . – Labeeb Panampullan 8 February 2011 в 11:16
  • 2
    Убедитесь, что анимации, определенные в slide_in_left и right, построены с использованием набора определений objectAnimator, а не старого определения анимации. – Reto Meier 9 February 2011 в 17:20
  • 3
    Это очень помогло. Я был на правильном пути, но просто не добрался до конца. Для других читателей вы также можете иметь андроид: интерполятор в качестве атрибута, с указанным вашим любимым (например, «@android: интерполятор / линейный»). Он по умолчанию имеет значение @android: интерполятор / ускорение_декурации ". – Dave MacLean 28 February 2011 в 01:44
  • 4
    Я нацелен на API Level 7 с API совместимости. Есть ли способ обойти Осколки? – Jarrod Smith 15 March 2012 в 23:55
  • 5
    @JarrodSmith вы можете попробовать использовать библиотеку совместимости, такую ​​как NineOldAndroids , чтобы довести API Honeycomb до Eclair. – Mr. S 28 April 2012 в 15:05

Если вам не нужно использовать библиотеку поддержки, посмотрите на ответ Roman.

Но если вы хотите использовать библиотеку поддержки, вы должны использовать старой анимационной каркас, как описано ниже.

После консультаций с ответами и blindstuff's я получил следующий код.

фрагменты появляются сползанием справа и сползанием влево при нажатии назад.

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>

exit.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 библиотеки поддержки.

219
ответ дан Community 21 August 2018 в 01:52
поделиться
  • 1
    Это только спасло меня. Обратите внимание, обратите внимание на , порядок важен , который, естественно, я пропустил в первый раз. Это означает, что вы должны вызвать setCustomAnimations () перед заменой (). – Stephen Kidson 5 December 2013 в 22:01
  • 2
    Я пытался реализовать на своих фрагментах. Я написал все, как вы упомянули, но logcat говорит: unknow animator name translate Как я могу решить эту проблему? Кстати, я называю свой фрагмент на навигационном ящике (раздвижное меню) – Zafer Celaloglu 6 November 2014 в 12:36
  • 3
    Отлично работает, но выясняется, что построение этого с помощью инструментов построения 21.1 генерирует ошибку, говорящую «Недопустимое имя файла: должно содержать только строчные буквы и цифры ([a-z0-9 _.])». Я предлагаю редактировать имена файлов в ответ на pop_enter.xml и pop_exit.xml. – smichak 25 January 2015 в 08:46
  • 4
    Отличное решение, и он отлично работает, когда я нажимаю кнопку «Назад». У меня только один вопрос: если я хочу создать пользовательский backButton, какой код мне нужно вызвать для репликации поведения с помощью кнопки «Назад»? – Thomas Teilmann 5 March 2015 в 09:01
  • 5
    Томас, если вы хотите вернуться, вы должны реализовать эту форму: .setCustomAnimations (R.anim.pop_enter, R.anim.pop_exit, R.anim.enter, R.anim.exit) – Alex Zaraos 15 June 2015 в 15:41

Пожалуйста, используйте это, я думаю, что гораздо лучшие решения. Android Studio предоставляет значение по умолчанию animation.

fragmentTransaction.setCustomAnimations (android.R.anim.slide_in_left, android.R.anim.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();

Выход:

10
ответ дан Gowthaman M 21 August 2018 в 01:52
поделиться

Моя модифицированная библиотека поддержки поддерживает использование анимаций просмотра (например, <translate>, <rotate>) и объектных аниматоров (т. е. <objectAnimator>) для фрагментарных переходов. Он реализован с помощью NineOldAndroids . Подробнее см. В моей документации по github.

5
ответ дан mark.kedzierski 21 August 2018 в 01:52
поделиться

Я решаю этот способ ниже

Animation anim = AnimationUtils.loadAnimation(this, R.anim.slide);
fg.startAnimation(anim);
this.fg.setVisibility(View.VISIBLE); //fg is a View object indicate fragment
1
ответ дан Shakawat Hossain 21 August 2018 в 01:52
поделиться
Другие вопросы по тегам:

Похожие вопросы: