0

我想在其入口处向上滑动一个片段并在其出口处向下滑动它。这应该很简单,但我遇到了问题。

动画代码:向下滑动->

<?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" />

向上滑动 ->

<?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();
        }

但我没有得到想要的结果。而且我不想替换片段,但总是添加片段。

4

1 回答 1

1

尝试使用 anim 文件夹动画中的这个简单解决方案。

替换这个

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)。

看截图

在此处输入图像描述

于 2019-07-04T17:50:12.807 回答