Ich habe folgendes Problem:Gemeinsame Elemente und Inhaltsübergänge in Fragmente
I von Fragment
A bis Fragment
B. den Übergang bin versucht Es ist ein gemeinsames Element, das zwischen diesen Fragmenten in Form eines Button
und einige andere View's
(siehe Layout).
<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>
Was ich versuche zu tun, alle Inhalte lassen in Fragment
mit Ausnahme des gemeinsamen Element, Übergang (Folie nach links) und lassen Sie den gesamten Inhalt Form Fragment
B mit Ausnahme der gemeinsamen Element von rechts einschieben. Während dieses Inhaltsübergangs möchte ich, dass das freigegebene Element in seiner ursprünglichen Position bleibt, bis die Inhaltsübergänge fertig sind, und es dann an seine neue Position gleiten lässt. Dieses letzte Verhalten ist dort, wo es schief geht: einmal I Starten Sie den Exit-Übergang in Fragment
A das gemeinsame Element verschwindet und von rechts mit dem Inhalt Übergang von Fragment
B eingefügt. Das Verhalten des freigegebenen Elements ist korrekt, wenn ich keine Exit/Enter-Übergänge hinzufügen.
Der Code (in 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));
Kann mir jemand helfen, das gewünschte Verhalten zu bekommen?
Update:
ich um das gemacht habe ein Werk fast tut, was ich will animate()
auf meine Ansichten mit ihnen zu gleiten/verblassen und nach Abschluss dieser Animation auslösen das gemeinsame Element Transaktion:
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();
});
Das Problem mit dieser Lösung ist, dass ich nicht in die Views
der genannten Fragment
schieben kann, so dass ich jetzt nur die Views
verblassen.
Dumme Frage, aber haben Sie in [Szenen] (https://developer.android.com/training/transitions/scenes.html) untersucht. Sie könnten die gleichen Element IDs geben und dann die Übergänge bereitgestellt werden (oder entfernt werden können)) zu den erforderlichen Elementen. – Droidekas
@Droidekas Ich habe mir Szenen angesehen, aber ich bin mir nicht sicher, wie man sie benutzt, um mein Problem zu lösen ... Ich habe eine Arbeit gemacht, die fast das tut, was ich will, ich werde meine Frage mit der aktualisieren aktuelle Lösung. Aber immer noch auf der Suche nach einer Möglichkeit, dies mit dem Transitions-Framework zu tun. – Joris
Es könnte die Diskussion erleichtern, wenn Sie erläutern könnten, warum Sie die zwei verschiedenen Schaltflächeninstanzen in den beiden Fragmenten benötigen, wenn die beiden Schaltflächen tatsächlich eine einzige visuelle "Ansicht" für den Benutzer haben. Wenn der Benutzer nur eine einzelne Schaltfläche sieht ... warum dann nicht eine einzelne Button-Instanz (die von der Aktivität verwaltet wird, oder vielleicht ein anderes Einzweckfragment) und dann lassen Sie Ihre zwei Inhaltsfragmente irgendwie darauf verweisen? –