片段共享元素转换与add()而不是replace()?

时间:2015-03-25 15:25:55

标签: android shared-element-transition fragment-transitions

我正在尝试在片段之间进行共享元素转换,使用replace()添加第二个片段时一切正常,但是在代码库add()中使用了很多,但在使用时, 转换只是跳到结束值

是否可以在添加的片段之间进行转换? 感谢

@Override
public void onClick(View v) {
    setSharedElementReturnTransition(TransitionInflater.from(getActivity())
        .inflateTransition(android.R.transition.move));

    FragmentB secondFragment = new FragmentB();
    secondFragment.setSharedElementEnterTransition(TransitionInflater.from(getActivity())
        .inflateTransition(android.R.transition.move));

    getFragmentManager().beginTransaction()
        .add(R.id.container, secondFragment)
        .addToBackStack(null)
        .addSharedElement(imageView, imageView.getTransitionName())
        .commit();
}

3 个答案:

答案 0 :(得分:2)

因为系统不会从第一个片段经历onPause,所以它不会发生。因为当你添加一个新片段时,新片段会出现在旧片段的顶部。

但你可以伪造它,虽然你会有更多的代码!

下面有一个示例:

https://github.com/Kisty/FragmentTransitionExample

和视频没有完全相关但可以帮助您理解:

https://www.youtube.com/watch?v=CPxkoe2MraA

答案 1 :(得分:0)

尝试为FragmentTransaction添加.detach()方法。

    FragmentManager manager = activity.getSupportFragmentManager ();
    Fragment currentFragment = manager.findFragmentById (CONTAINER_ID); 
    int intoContainerId = currentFragment.getId ();
    manager.beginTransaction ()
            .setTransition (FragmentTransaction.TRANSIT_FRAGMENT_FADE)
            .addSharedElement(view, transitionName)
            .addToBackStack (withTag)
            .detach(currentFragment)
            .add(intoContainerId, newFragment, withTag)
            .commit();

答案 2 :(得分:0)

试试这个

getSupportFragmentManager().beginTransaction() 
                .addSharedElement(myImage, "mytransition") 
                .add(R.id.recycler_view_container, myFragment2) 
                .hide(myFragment1)  
                 commit(); 

为我工作