Анимировать фрагмент слайд и скользить вниз - PullRequest
0 голосов
/ 04 июля 2019

Я хочу сдвинуть фрагмент на входе и сдвинуть его вниз на выходе. Это должно быть довольно просто, но я сталкиваюсь с проблемами.

Код анимации: Скользить вниз ->

<?xml version="1.0" encoding="utf-8"?>
<translate xmlns:android="http://schemas.android.com/apk/res/android"
    android:duration="@android:integer/config_shortAnimTime"
    android:fromYDelta="100%p"
    android:toYDelta="0%p"
    android:interpolator="@android:anim/accelerate_interpolator" />

Slide Up ->

<?xml version="1.0" encoding="utf-8"?>
<translate xmlns:android="http://schemas.android.com/apk/res/android"
    android:duration="@android:integer/config_shortAnimTime"
    android:fromYDelta="0%p"
    android:toYDelta="100%p"
    android:interpolator="@android:anim/accelerate_interpolator" />

Это мой код для перехода фрагмента:

try {
            if (fragment != null && mSelectedTabIndex != NO_TAB) {
                FragmentTransaction ft = createTransactionWithOptions(transactionOptions);
                detachCurrentFragment(ft);
                    ft.setCustomAnimations(R.animator.slide_up,R.animator.slide_down,R.animator.slide_up,R.animator.slide_down);

                ft.add(mContainerId, fragment, generateTag(fragment));
                ft.commit();

                executePendingTransactions();
                mFragmentStacks.get(mSelectedTabIndex).push(fragment);

                mCurrentFrag = fragment;
                if (mTransactionListener != null) {
                    mTransactionListener.onFragmentTransaction(mCurrentFrag, TransactionType.PUSH);
                }

            }
        }catch (Exception e)
        {
            e.printStackTrace();
        }

Но я не получаю желаемых результатов. И я не хочу заменять фрагмент, но всегда добавляю фрагмент.

1 Ответ

1 голос
/ 04 июля 2019

Попробуйте использовать это простое решение из анимации папки аним.

Замените это

fragmentTransaction.replace(R.id.frame, firstFragment, "fragment_class_name");

на

fragmentTransaction.add(R.id.frame, firstFragment, "fragment_class_name");

Пример

FragmentManager fragmentManager = getSupportFragmentManager();
FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
fragmentTransaction.setCustomAnimations(R.anim.slide_up, R.anim.slide_up);
fragmentManager.addOnBackStackChangedListener(this);
fragmentTransaction.add(R.id.frame, firstFragment, "fragment_class_name");
fragmentTransaction.addToBackStack("fragment_class_name");
fragmentTransaction.commit();

Причина использования добавить фрагмент Важное отличие:

replace удаляет существующий fragment и добавляет новый fragment ..

, но add сохраняет существующие фрагменты и добавляет новый фрагмент, что означает, что существующий фрагмент будет активным, и они не будут находиться в состоянии «приостановлено», поэтому при нажатии кнопки «назад» onCreateView() не вызывается для существующего fragment (fragment, который был там до добавления нового fragment).

См. скриншот

enter image description here

...