Как установить переход слайд-аута для фрагмента

Я применяю набор переходов для входа во фрагмент, а для выхода я хочу применить анимацию выдвижения, как я могу это сделать, вот мой код:

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
    productDetailFragment.setSharedElementEnterTransition(new DetailsTransition());
    productDetailFragment.setEnterTransition(new Fade());
    productDetailFragment.setExitTransition(new Slide(Gravity.RIGHT));
}
((MainActivity)context).getSupportFragmentManager()
                       .beginTransaction()
                       .replace(R.id.fragment, productDetailFragment)
                       .addSharedElement(viewHolder.iv, "kittenImage")
                       .addToBackStack(null)
                       .commit();

person blackHawk    schedule 10.04.2018    source источник
comment
stackoverflow.com/questions/21026409/ посмотрите на этот ответ   -  person Atif AbbAsi    schedule 10.04.2018
comment
а если мы хотим установить с помощью setExitTransition?   -  person blackHawk    schedule 10.04.2018
comment
да, вы тоже можете использовать это, смотрите мой ответ.!   -  person Atif AbbAsi    schedule 10.04.2018


Ответы (3)


Пожалуйста, проверьте приведенный ниже код, чтобы пользовательская анимация применялась к переходам фрагментов:

getSupportFragmentManager()
        .beginTransaction()
        .setCustomAnimations( R.anim.slide_up, 0, 0, R.anim.slide_down)
        .show( m_topFragment )
        .commit();

slide_up.xml

<?xml version="1.0" encoding="utf-8"?>
<objectAnimator
        xmlns:android="http://schemas.android.com/apk/res/android"
        android:interpolator="@android:anim/accelerate_decelerate_interpolator"
        android:propertyName="translationY"
        android:valueType="floatType"
        android:valueFrom="1280"
        android:valueTo="0"
        android:duration="@android:integer/config_mediumAnimTime"/>

слайд_вниз.xml

<?xml version="1.0" encoding="utf-8"?>
<objectAnimator
        xmlns:android="http://schemas.android.com/apk/res/android"
        android:interpolator="@android:anim/accelerate_decelerate_interpolator"
        android:propertyName="translationY"
        android:valueType="floatType"
        android:valueFrom="0"
        android:valueTo="1280"
        android:duration="@android:integer/config_mediumAnimTime"/>

Выше я показываю вам переход slide_up и down, но вы можете использовать лево-право и любой пользовательский objectAnimator, чтобы показать анимацию во время перехода вашего фрагмента, и надеюсь, что это поможет вам.

person Jyubin Patel    schedule 10.04.2018

попробуйте что-то вроде этого.! пусть это сработает для вас.! Пример транзакции фрагмента

Пример слайда

FragmentTransaction fragmentTransaction = mFragmentManager.beginTransaction();

Fade exitFade = new Fade();
exitFade.setDuration(FADE_DEFAULT_TIME);
previousFragment.setExitTransition(exitFade);

or

Transition slideTransition = new Slide(Gravity.BOTTOM);
Transition fadeTransition = new Fade();
TransitionSet set = new TransitionSet();
set.addTransition(slideTransition);
set.addTransition(fadeTransition);
person Atif AbbAsi    schedule 10.04.2018
comment
его выход слева, как слайд не исчезает - person blackHawk; 10.04.2018
comment
programcreek.com/java-api-examples/ проверить это - person Atif AbbAsi; 10.04.2018
comment
Я пытался, но скольжение и исчезновение не сочетаются друг с другом - person Nezneika; 26.12.2018

Фрагмент вызова:

FragmentManager fragmentManager = getSupportFragmentManager();
boolean fragmentPopped = fragmentManager.popBackStackImmediate("OtpFragment", 0);
Fragment fragment = null;
Bundle b = new Bundle();

if (!fragmentPopped && fragmentManager.findFragmentByTag("OtpFragment") == null) {
    fragment = new OtpFragment();
    FragmentTransaction transaction = fragmentManager.beginTransaction();
    transaction.setCustomAnimations(R.anim.enter_from_right, R.anim.exit_from_left);
    transaction.replace(R.id.frame_container, fragment, "OtpFragment")
               .addToBackStack("OtpFragment")
               .commit();
}

Создайте каталог anim внутри папки res: теперь создайте два отдельных файла для анимации входа/выхода: например, R.anim.enter_from_right и R .anim.exit_from_left

Введите слайд-анимацию:

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
android:shareInterpolator="false">
<translate
    android:fromXDelta="100%" android:toXDelta="0%"
    android:fromYDelta="0%" android:toYDelta="0%"
    android:duration="300" />
</set>

Анимация выходной стороны:

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
    android:shareInterpolator="false">
<translate
    android:fromXDelta="0%" android:toXDelta="-100%"
    android:fromYDelta="0%" android:toYDelta="0%"
    android:duration="300"/>
</set>
person Manish Gupta    schedule 10.04.2018
comment
а если мы хотим установить с помощью setExitTransition? - person blackHawk; 10.04.2018
comment
не уверен в этом, но: transaction.setCustomAnimations(R.anim.enter_from_right, R.anim.exit_from_left); работает для меня - person Manish Gupta; 10.04.2018