动画片段向上滑动并向下滑动

时间:2019-07-04 17:36:13

标签: android android-fragments fragment-transitions

我想在其入口处向上滑动一个片段,并在其出口处向下滑动它。它应该很简单,但是我面临着问题。

动画代码: 向下滑动->

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

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

1 个答案:

答案 0 :(得分: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)。

查看屏幕截图

enter image description here