没有backstack的共享元素后退动画

问题描述 投票:0回答:1

我在我的应用中使用了一个活动多个片段。我使用共享元素动画。我有两个片段,其中一个是详细页面。

我不想为片段转换添加ToBackStack函数。并且在某些情况下,细节片段不返回动画。 (fragmentMain-> fragmentDetail)

DetailFragment detailFragment = new DetailFragment();
Transition moveTransition = TransitionInflater.from(MainActivity.singleInstance)
            .inflateTransition(android.R.transition.move); // android.R.transition.move
moveTransition.setDuration(400);

detailFragment.setSharedElementEnterTransition(moveTransition);

FragmentManager fragmentManager = MainActivity.getActivityFragmentManager();
FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction()
            .addSharedElement(sharedView, sharedView.getTransitionName())
            .replace(R.id.mainLayout, detailFragment);

fragmentTransaction.commitAllowingStateLoss();
fragmentManager.executePendingTransactions();

这段代码适合我。我知道如果我使用addToBackStack,fragmentDetail-> fragmentMain会自动显示动画效果。但我不想使用后台堆栈。

下面的代码不适用于fragmentDetail-> fragmentMain。

detailFragment.setSharedElementReturnTransition(moveTransition);
mainFragment.setSharedElementEnterTransition(moveTransition);

FragmentManager fragmentManager = MainActivity.getActivityFragmentManager();
FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction()
            .addSharedElement(textView, textView.getTransitionName())
            .replace(R.id.mainLayout, mainFragment);

fragmentTransaction.commitAllowingStateLoss();
fragmentManager.executePendingTransactions();

如何为这种情况做共享元素动画?

android android-animation android-transitions shared-element-transition
1个回答
0
投票

看看你的onCreateView函数。如果它重新创建布局,则会中断转换ID。

解:

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
    // Inflate the layout for this fragment
    if(inflatedView != null)
        return inflatedView;
    inflatedView = inflater.inflate(R.layout.fragment_blank, container, 
    return inflatedView;
}
© www.soinside.com 2019 - 2024. All rights reserved.