2015-10-26 19 views
5

Ho un layout simile a quello nella foto qui sottoAndroid elemento condiviso di transizione, posizione di partenza sbagliata

enter image description here

dove una cornice arancione è un HostFragment è costruito in questo modo:

<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/coordinator" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    > 

    <android.support.design.widget.AppBarLayout 
     android:id="@id/appbar" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"> 

      <android.support.v7.widget.Toolbar 
       android:id="@id/toolbar" 
       android:layout_width="match_parent" 
       android:layout_height="?attr/actionBarSize" 
       app:layout_scrollFlags="scroll|enterAlways" 
       app:popupTheme="@style/ThemeOverlay.AppCompat.Light" 
       app:titleMarginStart="68dp" 
       /> 

      <de.halfbit.audiopie.ui.common.views.SlidingTabs 
       android:id="@id/tabs" 
       android:layout_width="match_parent" 
       android:layout_height="?attr/actionBarSize" 
       app:slidingTabsIndicatorColor="@color/accent" 
       /> 

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

    <android.support.v4.view.ViewPager 
     android:id="@id/pager" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     app:layout_behavior="@string/appbar_scrolling_view_behavior" /> 

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

e una cornice blu è un bambino ItemsFragment con un RecyclerView in esso.

Quando faccio clic su un riquadro nello RecyclerView sostituisco HostFragment con un altro frammento ContentFragment, che supponiamo di condividere l'immagine su cui si fa clic. Lo faccio mediante l'applicazione di una transizione elemento condiviso come segue:

FragmentManager fm = getChildFragmentManager(); 
Fragment fragment = ContentFragment.newInstance(); 

AutoTransition autoTransition = new AutoTransition(); 
autoTransition.setDuration(3000); 
fragment.setSharedElementEnterTransition(autoTransition); 

fm.beginTransaction() 
    .replace(R.id.library, fragment) 
    .addSharedElement(view, "cover") 
    .commit(); 

Funziona bene accanto a una cosa: posizione iniziale della piastrella coperchio quando l'animazione inizia nel ContentFragment è sbagliato (see this screen cast video) - ha indesiderati fondo offset.

Visivamente questo offset sembra uguale all'altezza della barra schede di HostFragment. Avete qualche idea su come evitare questo offset?

Vale anche la pena menzionare che tutti i bambini RecyclerView's hanno un numero unico transitionNames.

+0

Hai provato isolare il problema, per vedere se è causato da 'CoordinatorLayout'? È una classe buggy, quindi proverei a eseguire l'animazione in un semplice genitore di "FrameLayout" e a vedere se il problema è ancora presente. –

+2

@PaulBurke Grazie per averci esaminato. Sono piuttosto turbato dalla quantità di problemi nelle ultime librerie di supporto e di progettazione. Quindi ho deciso di usare un altro tipo di animazione per ora. Ho bisogno di un po 'di tempo per calmare e poi cercherò di isolare il problema. –

risposta

0

So che questa domanda è antica, ma ho lottato con un problema simile a questo.

Alla fine tutto quello che dovevo fare è cambiare l'androide: bandierina clipChildren in vista genitore xml false.

Problemi correlati