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.
- Habilitar transiciones de contenido de ventana
- Asignar un nombre de transición común
- Actividad de inicio
- Múltiples elementos compartidos
- 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">