片段中的共享元素和内容转换

我有以下问题:

我试图从Fragment A过渡到Fragment B.这些片段之间有一个Button和其他View's (见布局)共享元素。

 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" xmlns:flipper="http://schemas.android.com/apk/res-auto" android:layout_width="match_parent" android:layout_height="match_parent"> <com.mypackage.view.IndicatorViewFlipper android:transitionGroup="true" android:id="@+id/intro_viewflipper" android:layout_width="match_parent" android:layout_height="match_parent" flipper:indicatorColor="@color/white" flipper:indicatorMargin="4dp" flipper:indicatorRadius="4dp" flipper:indicatorBarMargin="104dp"/> <Button android:id="@+id/account_create_btn" style="?android:attr/borderlessButtonStyle" android:textColor="@color/white" android:layout_width="match_parent" android:layout_height="@dimen/button_standard_height" android:layout_above="@+id/txt_already_account" android:background="@drawable/button_yellow_selector" android:transitionName="create_account" android:text="@string/account_create_btn" android:textSize="24sp" android:textAllCaps="false" /> <TextView android:id="@+id/txt_already_account" android:layout_width="match_parent" android:layout_height="wrap_content" android:gravity="center" android:layout_above="@+id/account_login_btn" android:layout_marginTop="24dp" android:text="@string/account_welcome_already_account"/> <Button android:id="@+id/account_login_btn" style="?android:attr/borderlessButtonStyle" android:layout_width="match_parent" android:layout_height="@dimen/button_standard_height" android:layout_marginTop="8dp" android:layout_alignParentBottom="true" android:transitionName="login" android:background="@drawable/button_blue_selector" android:textColor="@color/white" android:textSize="24sp" android:textAllCaps="false" android:text="@string/account_create_login_btn"/> </RelativeLayout> 

我想要做的是让所有的内容除了共享元素 ,转换(向左滑动),让所有的内容形成Fragment B, 除了共享元素从右侧滑入。 在这个内容转换过程中,我希望共享元素保持其原始位置,直到内容转换完成,然后让它滑动到Fragment B中的新位置。

这最后一个行为是错误的地方:一旦我开始Fragment A中的退出转换,共享元素消失,并从Fragment B的内容转换从右侧滑入。共享元素的行为是正确的,如果我不添加任何退出/input转换。

代码(在Fragment A中):

 Fragment fragment = MyFragment.newInstance(); FragmentTransaction fragmentTransaction = getFragmentManager().beginTransaction(); fragmentTransaction.hide(this); fragmentTransaction.add(R.id.frame_container, fragment, fragment.getClass().getSimpleName()); fragmentTransaction.addSharedElement(sharedElement, sharedElementTag); Transition sharedElementTransaction = TransitionInflater.from(getActivity()).inflateTransition(android.R.transition.move); sharedElementTransaction.setStartDelay(400); fragment.setSharedElementEnterTransition(sharedElementTransaction); setExitTransition(new Slide(Gravity.LEFT).setDuration(200)); fragment.setEnterTransition(new Slide(Gravity.RIGHT).setDuration(200)); 

任何人都可以帮助我得到所需的行为?

更新:

我已经做了一个工作,几乎做我想要使用我的意见animate()滑动/淡入淡出,并在此animation完成时触发共享元素事务:

 Transition sharedElementTransition = TransitionInflater.from(getActivity()).inflateTransition(android.R.transition.move); sharedElementTransition.setStartDelay(400); fragment.setSharedElementEnterTransition(sharedElementTransition); setSharedElementReturnTransition(sharedElementTransition); mLoginBtn.animate() .x(-mLoginBtn.getWidth()) .setDuration(400) .start(); viewFlipper.animate() .x(-viewFlipper.getWidth()) .setDuration(400) .setListener(new AnimatorListenerAdapter() { @Override public void onAnimationEnd(Animator animation) { super.onAnimationEnd(animation); transaction.commit(); } }) .start(); fragment.setEnterSharedElementCallback(new SharedElementCallback() { @Override public void onSharedElementStart(List<String> sharedElementNames, List<View> sharedElements, List<View> sharedElementSnapshots) { super.onSharedElementStart(sharedElementNames, sharedElements, sharedElementSnapshots); viewFlipper.animate() .x(0) .setDuration(400) .setListener(null) .start(); mLoginBtn.animate() .x(0) .setDuration(400) .start(); }); 

这个解决scheme的问题是,我不能在被称为FragmentViews中滑动,所以现在我只是淡入Views

Solutions Collecting From Web of "片段中的共享元素和内容转换"