2016-04-30 14 views
12

Bitte schauen Sie sich dieses Video an, das einen Aktivitätsübergang für geteilte Elemente zeigt. Es ist ein Übergang von einer Listenaktivität zu einer Detailaktivität.Android-Shared-Element-Übergang: Helden-Ansicht wird vor anderen gezeichnet

[Video Link funktioniert nicht mehr]

Wie Sie die Bildansicht vor den Laschen gezogen wird sehen können.

Was ich erwarten würde ist, dass die Tabs in der Bildansicht in Schriftart gezeichnet werden und während des Übergangs ausgeblendet werden (so dass sie am Ende der Animation verschwunden sind).

Das einzige, was zu funktionieren scheint setzt windowSharedElementsUseOverlay auf true, aber das hat andere hässliche Auswirkungen, so dass nicht als eine Option zu sein scheint.

Der am häufigsten vorgeschlagene Ansatz besteht darin, die Registerkarten in den Übergang selbst aufzunehmen, aber das Problem besteht darin, dass die Registerkarten nicht in der Detailaktivität vorhanden sind, sodass sie nicht gemeinsam genutzt werden können.


Code: ich die Detail-Aktivität wie folgt beginnen:

options = ActivityOptionsCompat.makeSceneTransitionAnimation(activity, pairs); 
ActivityCompat.startActivity(activity, subActivity, options.toBundle()); 
+0

Haben Sie zufällig eine Höhe irgendwo in Ihrem Stil? Einer der Gründe dafür, dass Ansichten übereinander angezeigt werden, ist, wenn eine Höhe festgelegt ist. –

+0

Ich habe dieses Problem gelöst, indem ich meine 'RecyclerView' leicht nach unten durchgeblättert habe, wenn das Objekt angeklickt wurde, so dass die Ansicht nicht durch die 'ActionBar' /' Toolbar' behindert wird. Nicht ideal, aber es sieht gut aus und macht den Job. Die Komplexität bestand darin, zu bestimmen, wie weit nach unten gescrollt werden sollte, basierend darauf, wie stark die Sicht behindert war. –

+0

@SimonGuerout danke Simon, versucht, alle Animationen zu entfernen, kein Erfolg: - (( –

Antwort

0

Sie sollten dies versuchen.

Auf der austretenden Aktivität, rufen getWindow() setExitTransition (null);

Rufen Sie bei der Eingabeaktivität getWindow() auf. SetEnterTransition (null);

Es verhindert das Ausblenden der ausgehenden Aktivität und das Einblenden der Eingabeaktivität, wodurch der augenscheinliche Blinkeffekt beseitigt und der Übergang geglättet wird.

+0

Danke Sandip, es funktioniert nicht :-( –

2

Ich glaube, was Sie brauchen, ist, das Tab-Layout von der Übergangsanimation auszuschließen, anstatt sie einzuschließen.

So in den onCreate Ihre Liste Aktivität, umfassen:

Transition fade = new Fade(); 
fade.excludeTarget(R.id.tab, true); // use appropriate id for you tab 
getWindow().setExitTransition(fade); 
getWindow().setEnterTransition(fade); // try getWindow().setReenterTransition(fade); instead 

haben auf jeden Fall einen Blick auf Alex Lockwood Antwort auf How do I prevent the status bar and navigation bar from animating during an activity scene animation transition? wo er eine größere und mehr in der Tiefe zu dem Thema aber verdaulich Erklärung gibt. Sie sollten auch überlegen, die Lösung in diesem Post hinzuzufügen/zu implementieren.

+0

Danke ade, das funktioniert nicht. Ich bin mir nicht sicher, verstehe ich Ihren Punkt: Sie schlagen vor um die Registerkarten von der Transition der Detailaktivität auszuschließen, aber sie gehören zur Masteraktivität (und sind nicht in der Detailaktivität vorhanden) –

+0

Das Überleitungsframework ist auf 2 Typen ausgerichtet: Inhaltsübergänge und gemeinsame Elementübergänge. Die Registerkarte ist ein nicht-geteiltes Element, was Sie also steuern wollen, ist das Beenden und Wiedereingeben der nicht-geteilten Elemente Ihrer Listen-/Hauptaktivität, dh der Registerkarte. Das ist, was der Code oben versucht. –

1

Meine aufrufende Aktivität hat sowohl eine tablayout als auch eine Symbolleiste innerhalb und jedes Mal, wenn ich den Übergang machte, würde das Bild über der tablayout und Symbolleiste erscheinen, so dass der Übergang unordentlich aussehen.

Ich habe das Problem recht elegant gelöst, indem ich einfach ein "dummy" tablayout und eine "dummy" Werkzeugleiste in meine aufgerufene Aktivität eingefügt habe. Die „Dummy“ Elemente sind nicht sichtbar, so dass es nicht das Layout meiner genannten Aktivität auswirkt, aber der Übergangseffekt wird ordnungsgemäß funktionieren, wenn Sie sie in hinzufügen.

   <android.support.v7.widget.Toolbar 
        android:id="@+id/toolbar2" 
        android:transitionName="toolbar" 
        android:visibility="gone" 
        android:layout_width="match_parent" 
        android:layout_height="?attr/actionBarSize" /> 

       <android.support.design.widget.TabLayout 
        android:id="@+id/sliding_tabs" 
        android:layout_width="match_parent" 
        android:layout_height="60dp" 
        android:visibility="gone" 
        android:transitionName="tab" 
        ></android.support.design.widget.TabLayout> 

ich dann die tablayout und die Symbolleiste als hinzugefügt Paar in meinem Übergang:

 Pair<View, String> p4 = Pair.create(getActivity().findViewById(R.id.sliding_tabs), "tab"); 
     Pair<View, String> p5 = Pair.create(getActivity().findViewById(R.id.toolbar), "toolbar"); 
     Bundle options = ActivityOptionsCompat.makeSceneTransitionAnimation(getActivity(), p1, p2, p3, p4, p5).toBundle(); 
Verwandte Themen