Las transiciones de entrada de actividad de Android no funcionarán según lo previsto en vistas superpuestas

Aquí está el escenario:

Estoy tratando de declarar la animación de transición entre dos actividades – maestro y el detalle. Master es una lista de RecyclerView con imágenes, el detalle es LinearLayout con la imagen del encabezado de la lista de los padres. Las transiciones se declaran en XML y se enlazan a la actividad de detalle de la siguiente manera:

 <item name="android:windowSharedElementEnterTransition">@transition/activity_enter_shared</item> <item name="android:windowEnterTransition">@transition/activity_enter</item> 

En la transición del adaptador de RecyclerView se activa de la siguiente manera:

 final ActivityOptions options = ActivityOptions.makeSceneTransitionAnimation( mContext, imgView, ViewCompat.getTransitionName(imgView) ); mContext.startActivity(new Intent(mContext, ChildActivity.class), options.toBundle()); 

El problema es: En @transition/activity_enter estoy aplicando fade en algunos elementos de diseño (por ejemplo, botón de retroceso). Estos elementos se colocan en FrameLayout sobre una imagen . Esto parece causar problemas con las vistas de fade , que en lugar de aparecer suavemente en la pantalla, "pop in". Esto sólo ocurre cuando las vistas se superponen – si se coloca en LinearLayout everythings funciona como se pretende.

fade se declara en @transition/activity_enter manera:

 <fade android:startDelay="300" android:duration="100" android:interpolator="@android:interpolator/linear"> <targets> <target android:targetId="@id/target_id" /> </targets> </fade> 

Nota 1 – Si se activa de forma programática en Activity fade funciona bien:

 final ViewGroup frame = (ViewGroup) findViewById(R.id.frame); frame.setOnClickListener(new View.OnClickListener() { boolean visible; @Override public void onClick(View v) { TransitionManager.beginDelayedTransition(frame); visible = !visible; frame.findViewById(R.id.target_id).setVisibility(visible ? View.VISIBLE : View.GONE); } }); 

Nota 2 – La transición compartida ( @transition/activity_enter_shared ) es personalizada, sin embargo, usar el predeterminado no resuelve el problema.

Nota 3 – En su forma más simple, los diseños tienen este aspecto:

 <FrameLayout> <ImageView /> <ImageButton android:id="@+id/target_id" /> </FrameLayout/> 

Sin embargo, el problema no es específico de FrameLayout sino más bien superposición de vistas.

Nota 4 – Por ejemplo, en la siguiente disposición Lorem aparecerá, mientras ipsum se atenuará.

Introduzca aquí la descripción de la imagen

Muy bien, encontré una respuesta, para los interesados.

Tuve que poner

 <item name="android:windowSharedElementsUseOverlay">false</item> 

En mi definición de estilo.

De la documentación :

Indica si los elementos compartidos deben o no utilizar una superposición durante las transiciones. El valor por defecto es verdadero.

  • Botón de alternancia en el cajón de navegación
  • ¿Es válida la guía de diseño de iconografía Android para Android 5 / Diseño de material
  • CollapsingToolbarLayout con tablayout & image colapsando con la barra de herramientas pegajosa
  • Eliminar espacio entre los elementos de RecyclerView android
  • Cómo cambiar el diseño de android biblioteca de soporte FAB Button color de la frontera?
  • Cómo implementar hojas inferiores persistentes de Documentos de diseño de materiales
  • Por qué el diseño de material de Google dice: "El material nunca se dobla ni se pliega".
  • Chips componente en la biblioteca de soporte de Android?
  • CollapsingToolbarLayout no funciona bien con NestedScrollView
  • Material de diseño progressdialog
  • ¿Por qué `text_size_body` tiene un tamaño diferente en la librería AppCompat y Android Lollipop?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.