studio programacion herramientas fundamentos con avanzado aplicaciones android android-design-library floating-action-button

programacion - manual de android en pdf



La transiciĆ³n del elemento compartido de Android entre dos actividades no funciona (3)

En mi aplicación, estoy tratando de usar el elemento recién introducido para compartir entre actividades. Todo funciona como un encanto si el elemento compartido es con una posición fija (por ejemplo, android:layout_gravity="top" ), pero el problema surge cuando la vista está anclada.

Mi primera actividad se ve así:

<android.support.design.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/tools" xmlns:auto="http://schemas.android.com/apk/res-auto" android:layout_width="match_parent" android:layout_height="match_parent"> <android.support.v4.view.ViewPager android:id="@+id/pager" 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.support.design.widget.AppBarLayout> <android.support.design.widget.FloatingActionButton android:id="@+id/play_all" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="bottom|right" android:layout_margin="24dp"/> </android.support.design.widget.CoordinatorLayout>

Mi segunda actividad se ve así.

<android.support.design.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:auto="http://schemas.android.com/apk/res-auto" android:layout_width="match_parent" android:layout_height="match_parent"> <android.support.v7.widget.RecyclerView android:id="@+id/list" android:layout_width="match_parent" android:layout_height="match_parent" /> <android.support.design.widget.FloatingActionButton android:id="@+id/play" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_margin="16dp" android:elevation="10dp" android:src="@drawable/ic_action_play" auto:layout_anchor="@+id/appbar" android:transitionName="fab_button" auto:layout_anchorGravity="bottom|right" /> <android.support.design.widget.AppBarLayout android:id="@+id/appbar" android:layout_width="match_parent" android:layout_height="192dp"> ... </android.support.design.widget.AppBarLayout> ... </android.support.design.widget.CoordinatorLayout>

El código que uso es el siguiente:

Intent intent = ...; ActivityOptions options = ActivityOptions.makeSceneTransitionAnimation(this, view, "fab_button"); startActivity(intent, options.toBundle());

Si uso los layout_anchor y layout_anchorGravity la transición entre los dos FAB se realiza sin animación. Si el segundo FAB es con una posición fija, funciona perfectamente. ¿Qué estoy haciendo mal?


Actividad Transiciones de elementos compartidos:

Sigue los pasos.

  1. Habilitar transiciones de contenido de ventana
  2. Asignar un nombre de transición común
  3. Actividad de inicio
  4. Múltiples elementos compartidos
  5. Personalización de la transición de los elementos compartidos

Creo que no tienes que seguir el segundo paso. android:transitionName="fab_button" dado android:transitionName="fab_button" en la Segunda Activity pero no en la Primera Activity .

XML de la primera Activity (agregado android:transitionName="fab_button" ):

<android.support.design.widget.FloatingActionButton android:transitionName="fab_button" android:id="@+id/play_all" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="bottom|right" android:layout_margin="24dp"/>

Los enlaces de arriba de mayo te ayudarán.


Esto puede ser un poco tarde, pero encontré una manera de solucionar el problema. Tienes que envolver tu elemento compartido en un diseño y colocar el ancla en ese diseño:

<FrameLayout android:layout_width="wrap_content" android:layout_height="wrap_content" auto:layout_anchor="@+id/appbar" auto:layout_anchorGravity="bottom|right"> <android.support.design.widget.FloatingActionButton android:id="@+id/play" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_margin="16dp" android:elevation="10dp" android:src="@drawable/ic_action_play" android:transitionName="fab_button" /> <FrameLayout/>


También debe tener un nombre de transición en la actividad de recepción. Revisa mi codigo

Primera actividad

<android.support.design.widget.FloatingActionButton android:id="@+id/fab" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="bottom|end" android:layout_margin="@dimen/fab_margin" android:src="@drawable/ic_register" android:transitionName="@string/transition"/> </android.support.design.widget.CoordinatorLayout>

Y la segunda actividad xml

<android.support.design.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:fitsSystemWindows="true" android:transitionName="@string/transition" tools:context="com.example.shoppingappdemo.RegiserActivity">