2016-05-31 14 views
3

Ich habe eine RecyclerView mit einigen Karten, die jeweils einen Mini Floating Action Button enthalten. Wenn auf eine Karte geklickt wird, wird das Bild auf der Karte und der Fab in einem Übergang mit einem gemeinsamen Element verwendet.Geteilte Element Transition mit Floating Action Button Stochern

Wenn Sie den Rückkehrübergang ausführen, "schnappt" die schwebende Aktionsschaltfläche in ihre ursprüngliche Position zurück, anstatt sie so zu animieren, wie es eigentlich sein sollte.

Heres ein gif, der das Problem zeigt: https://gfycat.com/SnappySeparateDeer

Mein Code, um die Aktivität und den Übergang beginnen:

Intent intent = new Intent(mContext, PlayActivity.class); 

       Pair<View, String> p1 = Pair.create((View)holder.coverArt, "coverArt"); 
       Pair<View, String> p2 = Pair.create((View) holder.fab, "fab"); 
       ActivityOptionsCompat options = ActivityOptionsCompat. 
         makeSceneTransitionAnimation(mActivity, p1, p2); 

       mContext.startActivity(intent, options.toBundle()); 

die Mini fab auf den Karten:

<android.support.design.widget.FloatingActionButton 
      android:id="@+id/fab" 
      app:fabSize="mini" 
      android:layout_height="wrap_content" 
      android:layout_width="wrap_content" 
      app:layout_anchor="@id/coverArt" 
      app:layout_anchorGravity="bottom|right|end" 
      android:src="@drawable/ic_favorite" 
      android:layout_margin="16dp" 
      android:clickable="true" 
      android:transitionName="fab"/> 

und der in die Aktivität:

<android.support.design.widget.FloatingActionButton 
     android:id="@+id/fab" 
     android:layout_height="wrap_content" 
     android:layout_width="wrap_content" 
     app:layout_anchor="@id/coverArt" 
     app:layout_anchorGravity="bottom|right|end" 
     android:src="@drawable/ic_favorite" 
     android:layout_margin="16dp" 
     android:clickable="true" 
     android:transitionName="fab"/> 

EDIT: Ich möchte die Prämie erhöhen, aber es scheint, dass Feature in SO aus irgendeinem Grund nicht implementiert ist. Ich bin mir ziemlich sicher, dass ich zusätzliche Bounty-Punkte zur richtigen Antwort hinzufügen kann, also wird ein weiterer +50 hinzugefügt. Vielen Dank!

+0

Was genau ist das Problem? –

+0

@LukeSalamone Der Übergang wird vom System nicht richtig ausgerichtet. Wie Sie im Rücksprung sehen können, animiert die Fab wieder nach unten, aber sie schnappt nach links an ihre ursprüngliche Position anstatt an den üblichen fließenden Übergang. – Orbit

+0

Haben Sie daran gedacht, 'overridePendingTransition()' zu verwenden? –

Antwort

-2

Schritt: Sie müssen Ihr Detaillayout anpassen, dann funktioniert die Übergangsanimation perfekt. wie

<?xml version="1.0" encoding="utf-8"?> 
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:app="http://schemas.android.com/apk/res-auto" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent"> 

    <RelativeLayout 
     android:layout_width="match_parent" 
     android:layout_height="275dp"> 

     <ImageView 
      android:id="@+id/picture" 
      android:layout_width="match_parent" 
      android:layout_height="250dp" 
      android:fitsSystemWindows="true" 
      android:scaleType="centerCrop" 
      android:transitionName="picture" 
      app:layout_collapseMode="parallax" /> 

     <android.support.design.widget.FloatingActionButton 
      android:id="@+id/fabButton" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_alignParentBottom="true" 
      android:layout_alignParentRight="true" 
      android:layout_marginBottom="5dp" 
      android:layout_marginRight="16dp" 
      android:src="@mipmap/like" 
      android:transitionName="fabButton" 
      app:fabSize="normal" /> 

    </RelativeLayout> 

</FrameLayout> 

Hinweis: Sie passen Größe des Layouts und Bilder.

+1

Ich bin nicht sicher, wie dies das Problem beheben soll. Können Sie Ihre Lösung etwas erklären? – Orbit

+0

bitte zuerst versuchen Sie dies. – kapoor

0

Versuchen Fenster und Fragment Ausgang halten/geben Übergang, wie unten beschrieben:

<?xml version="1.0" encoding="utf-8"?> 
<fade xmlns:android="http://schemas.android.com/apk/res/" android:duration="500"/> 

Und gemeinsames Element Übergänge wie:

<?xml version="1.0" encoding="utf-8"?> 
<transitionSet xmlns:android="http://schemas.android.com/apk/res/android" 
      android:duration="500" 
      android:interpolator="@android:interpolator/decelerate_cubic"> 
    <changeBounds> 
    <arcMotion 
     android:maximumAngle="90" 
     android:minimumHorizontalAngle="90" 
     android:minimumVerticalAngle="0" /> 

    </changeBounds> 
</transitionSet> 

Ich bin mir nicht sicher, ob etwas anderes als Image richtigen Übergang hat Auswirkungen. Ich habe eine benutzerdefinierte Ansicht ausprobiert, die ich das letzte Mal gemacht habe und bekam ein ähnliches Problem, als ich in den Übergang kam, während die Rückkehr perfekt war.

+0

FAB erweitert ImageView. Wie auch immer, das schien nicht zu funktionieren, und ich bin ziemlich sicher ' 'ist erforderlich. – Orbit