在过渡期间来自后面的新片段视图

时间:2017-10-23 08:01:36

标签: android android-fragments android-animation android-transitions

我在活动中有两个片段。 当我从片段A转到片段B时,添加了自定义动画。这样片段B的视图从入口右侧滑入,然后在退出时从右侧滑出。

但是可以看到片段B从片段A的视图后面进入。因此,当片段A被片段B替换时,片段B的视图从右到左动画,但它从视图后面进入。片段A而不是  在片段A前面。

我能够注意到这一点,因为片段A的一半是透明的,片段B滑入只能从那个透明的一半看到,表明它从片段A后面而不是从前面滑入。

不完全确定为什么会这样。下面提供了相应的代码。 有人可以帮忙吗?

    private void navigateToFragment(@NonNull Fragment fragment, boolean addToBackStack, int enterAnim, int exitAnim, int popEnterAnim, int popExitAnim) {
            FragmentManager fragmentManager = getSupportFragmentManager();
            final FragmentTransaction transaction = fragmentManager.beginTransaction();


            transaction.setCustomAnimations(enterAnim, exitAnim, popEnterAnim, popExitAnim);
            transaction.replace(R.id.member_address_root, fragment, fragment.getClass().getSimpleName());
            if (addToBackStack){
                transaction.addToBackStack(fragment.getTag());
            }

            fragmentManager.executePendingTransactions();
            transaction.commit();
        }



 @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_member_address);

        if (savedInstanceState == null){

            if (getIntent() != null){
                Fragment fragment = FragmentA.newInstance();
                navigateToFragment(fragment, false, R.anim.no_animation, R.anim.no_animation, R.anim.no_animation, R.anim.no_animation);
            }
        }
    }

@Override
    public void onFragmentBRequested() {
      FragmentB fragment = new FragmentB();
        navigateToFragment(fragment, true, R.anim.enter_from_right, R.anim.no_animation, R.anim.no_animation, R.anim.exit_from_right);
    }
  基于按钮单击,从FragmentA调用

onFragmentBRequested()。

1 个答案:

答案 0 :(得分:0)

好的,所以我尝试了一下你要做的事情。基本上你想要当前片段不应该从它的位置移动/动画。新片段应该只有动画。我无法使用transaction.replace()与R.anim.no_animation'因为条目动画发生在当前片段后面。

因此,替换新片段,添加似乎更实用。

所以使用transaction.add()代替transaction.replace()可以正常工作。