【问题标题】:New fragment view coming from behind during transition过渡期间来自后面的新片段视图
【发布时间】:2017-10-23 08:01:36
【问题描述】:

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

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

我能够注意到这一点,因为 Fragment A 的一半是透明的,而 Fragment B 滑入只能从透明的一半看到,这表明它是从 Fragment 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);
    }

onFragmentBRequested() 基于按钮单击从 FragmentA 调用。

【问题讨论】:

  • 您没有为片段 (R.anim.no_animation) 提供退出动画。您应该在那里指定动画,例如 (R.anim.exit_to_left)
  • 我为 popExit 提供退出动画,而不是正常退出。那是基于特定的要求。问题是在进入动画期间,Fragment B 在进入时,它的视图是从 Fragment A 视图的后面而不是从 Fragment A 的前面进入的
  • 好的,所以您希望片段 A 保持原样,而片段 B 应该通过滑动动画接管?
  • 不,我希望在片段 B 的滑动完成后片段 A 消失。这正如预期的那样发生。问题是当片段 B 滑入时,它的视图从片段 A 的视图后面滑动。我能够注意到这一点,因为片段 A 的一半是透明的,而片段 B 滑入只能从透明的一半看到,表明它正在从 Fragment A 后面和前面滑入。

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


【解决方案1】:

好的,所以我对您正在尝试做的事情进行了一些实验。基本上你希望当前片段不应该从它的位置移动/动画并且新片段应该只动画。我无法使用带有“R.anim.no_animation”的transaction.replace() 实现,因为入口动画发生在当前片段后面。

与其替换新片段,添加似乎更实用。

所以使用 transaction.add() 而不是 transaction.replace() 可以按预期工作。

【讨论】:

  • 感谢您的建议。唯一的问题是 add() 会浪费资源,因为片段 A 会被抛在后面,不做任何事情……对于 B、C、D 和 E 也一样。所以我不会喜欢让他们占用资源。
  • 是的,如果您有一系列片段要替换,这会令人担忧。
猜你喜欢
  • 2015-07-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-05-16
  • 2011-09-01
  • 2011-06-23
  • 1970-01-01
相关资源
最近更新 更多