7

Ho un ActivityA contenente FragmentA e vorrei rendere una transizione di elemento condiviso ad ActivityB contenente FragmentB.Transizione elemento condiviso Android tra un'attività con un frammento in un'altra attività con un frammento

Nelle attività l'elemento condiviso sarebbe la barra degli strumenti. Nei frammenti sarebbe una vista testuale. C'è un modo per fare questo?

In caso contrario, come è possibile effettuare una transizione di elementi condivisa tra entrambi i frammenti nelle attività?

Grazie in anticipo per qualsiasi aiuto. Sono stato bloccato per un po '.

Ok, quindi fornirò del codice per chiarire.

Qui ho MainActivity:

<android.support.design.widget.CoordinatorLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:app="http://schemas.android.com/apk/res-auto" 
    android:id="@+id/content" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:fitsSystemWindows="true"> 

    <android.support.design.widget.AppBarLayout 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:theme="@style/AppTheme.AppBarOverlay"> 

     <!-- This is shared with DetailActivity --> 
     <android.support.v7.widget.Toolbar 
      android:id="@+id/toolbar" 
      android:layout_width="match_parent" 
      android:layout_height="?attr/actionBarSize" 
      android:background="?attr/colorPrimary" 
      app:popupTheme="@style/AppTheme.PopupOverlay" 
      android:transitionName="sharedToolbar"/> 

    </android.support.design.widget.AppBarLayout> 

    <!-- This contains MainFragment --> 
    <FrameLayout 
     android:id="@+id/activity_main_container" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent"/> 

</android.support.design.widget.CoordinatorLayout> 

Questa attività contiene questo frammento chiamato MainFragment:

<FrameLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent"> 


    <!-- This element is shared with DetailFragment --> 
    <TextView 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_gravity="center" 
     android:text="Fragment main" 
     android:transitionName="sharedFragment"/> 

    <!-- When this is clicked show next screen --> 
    <Button 
     android:id="@+id/fragment_main_button" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="Go to detail screen" 
     android:layout_gravity="bottom|center"/> 

</FrameLayout> 

Ora quello che voglio fare è quando si fa clic sul pulsante nella MainFragment voglio eseguire un transazione frammento a questa attività chiamata DetailActivity:

<android.support.design.widget.CoordinatorLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:app="http://schemas.android.com/apk/res-auto" 
    android:id="@+id/content" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:fitsSystemWindows="true"> 

    <android.support.design.widget.AppBarLayout 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:theme="@style/AppTheme.AppBarOverlay"> 

     <!-- This is shared with MainActivity --> 
     <android.support.v7.widget.Toolbar 
      android:id="@+id/toolbar" 
      android:layout_width="match_parent" 
      android:layout_height="?attr/actionBarSize" 
      android:background="?attr/colorPrimary" 
      app:popupTheme="@style/AppTheme.PopupOverlay" 
      android:transitionName="sharedToolbar"/> 

    </android.support.design.widget.AppBarLayout> 

    <!-- This contains DetailFragment --> 
    <FrameLayout 
     android:id="@+id/activity_detail_container" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent"/> 

</android.support.design.widget.CoordinatorLayout> 

Questa attività contiene questo frammento chiamato DetailFragment:

<FrameLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent"> 


    <!-- This element is shared with MainFragment --> 
    <TextView 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_gravity="center" 
     android:text="Fragment detail" 
     android:transitionName="sharedFragment"/> 

</FrameLayout> 

Come si può vedere nel codice entrambe le attività condividono la barra degli strumenti e ha lo stesso nome della transizione. I loro frammenti contenenti entrambi hanno una vista testuale che vorrei animare anche nella transizione. Anche queste visualizzazioni di testo hanno lo stesso nome di transizione. C'è un modo per fare questo? Ho provato e finora ho potuto solo animare la barra degli strumenti tra le due attività. Come faccio a fare in modo che i frammenti eseguano una transizione di elementi condivisa allo stesso tempo?

Se ciò non può essere fatto, come avrei potuto fare in modo, quando ho navigare dal MainActivity a DetailActivity che la TextView dei frammenti sono ciò che appare come la transizione in modo da non le barre degli strumenti (Se non posso animare l'attività e le transazioni frammento allo stesso tempo).

+0

plz pubblica ciò che cerchi? –

+0

@DaminiMehra SMS Il formato inglese non funziona qui, spero che tu abbia capito il motivo per cui le persone fanno domande qui. – Triode

risposta

0

Di fronte a un problema simile. Il mio errore è con il tipo di decisione architettonica che ho preso. Un'attività, più frammenti per ogni singolo flusso causa questo problema. Ora non posso avere transizioni desiderate quando si passa da un flusso all'altro perché è necessario caricare un'attività e un frammento.

Innanzitutto, modificare il colore di sfondo del frammento contenente l'attività nel colore di sfondo predefinito dell'app. Il colore di sfondo predefinito della mia app era grigio e uno sfondo bianco dell'attività del contenitore sembrava davvero pessimo. Uno sfondo grigio sembra meno male.

Ora, rimuovere la transizione predefinita dall'attività del contenitore. Questo può essere fatto usando overridePendingTransition(0,0);

Ora le cose appariranno meno brutte. È solo una soluzione.