Colapsar CardView dentro de RecyclerView al animar

Lo que estoy tratando de hacer

Tengo un CardView con un texto de apoyo en la parte inferior que se ha GONE por defecto. Quiero hacer que esta sección de la tarjeta sólo sea visible cuando el usuario haga clic en la "flecha de acción", como se muestra en la siguiente imagen:

Expand Arrow

Sé que puedo lograrlo simplemente estableciendo Visibilidad de VISIBLE , pero también quiero animar los eventos de expansión y colapso.

El problema y lo que he probado hasta ahora

Para ello he utilizado la android:animateLayoutChanges="true" en mi xml CardView , y funciona muy bien cuando se está expandiendo. Pero una vez que hago clic en la flecha de nuevo para colapsar el texto de apoyo, la tarjeta de abajo se superpone con la tarjeta que he hecho clic durante la animación. ¿Cómo puedo evitar esta superposición?

EDIT: Sé que puede ser posible hacer algo como la solución en esta cuestión , pero parece demasiado complicado ya que la opción android:animateLayoutChanges existe. Me pregunto si es posible resolver mi problema usando esa propiedad XML, para que sea sencillo.

Mi código de animación es el siguiente:

Código Java

 protected void expandCard() { if (isExpanded) { ibt_show_more.animate().rotation(0).start(); isExpanded = false; tv_support.setVisibility(View.GONE); } else { ibt_show_more.animate().rotation(180).start(); isExpanded = true; tv_support.setVisibility(View.VISIBLE); } } 

Código XML

 <android.support.v7.widget.CardView xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:card_view="http://schemas.android.com/apk/res-auto" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_margin="@dimen/spacing_small" card_view:cardCornerRadius="2dp" android:id="@+id/os_list_item_cv"> <RelativeLayout android:id="@+id/os_list_item_rl_root" android:layout_width="match_parent" android:layout_height="match_parent" android:animateLayoutChanges="true"> <!-- Here goes the header, the image, the action buttons and so on --> <!-- Omitted on purpose --> <!-- ... --> <!-- This is the support TextView --> <TextView android:id="@+id/tv_support" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_below="@+id/os_list_item_rl_actions" android:text="@string/bacon_ipsum" android:paddingBottom="24dp" android:paddingEnd="16dp" android:paddingRight="16dp" android:paddingLeft="16dp" android:paddingStart="16dp" android:visibility="gone"/> </RelativeLayout> </android.support.v7.widget.CardView> 

GIF para completar (con un comportamiento de colapso incorrecto)

Introduzca aquí la descripción de la imagen

Justo antes de cambiar la visibilidad, agregue esta línea de código:

 TransitionManager.beginDelayedTransition(the rootView containing the cardView, new AutoTransition()); 

Usted debe obtener una animación suave. También eliminar "animateLayoutChanges = true" de su xml antes de esto.

En cuanto a por qué esto funciona, al llamar a TransitionManager.beginDelayedTransition () hace que el TransitionManger capture los valores actuales en el ViewGroup principal y procese las animaciones en el siguiente cuadro de animación. La Transición pasada en este caso es una Transición Automática , que se ocupa de todo el desvanecimiento, movimiento y cambio de tamaño en el grupo de vista principal.

Consulte Transiciones y TransitionManager

También tenga cuidado de usar Transitions de la biblioteca de soporte cuando sea apropiado, o realice las verificaciones de nivel API necesarias.

  • No se muestra la elevación de Android de View en CardView
  • Contenido dinámico dentro de una lista en Android
  • Cómo agregar la funcionalidad de deslizar en Android CardView?
  • Android | CardView se mantiene por encima de TextView
  • Error: (27) No se encontró ningún identificador de recurso para el atributo 'srcCompat' en el paquete 'com.example.jaisonjoseph.newsclient'
  • Comportamiento de sombra extraño durante el cambio de tarjeta
  • ¿Por qué CardView y RecyclerView requieren minSdkVersion L?
  • Las ondulaciones no se muestran con selectableItemBackground como primer plano en un CardView con un dispositivo Android 5.0
  • Cardview - frontera blanca alrededor de tarjeta
  • Fondo transparente en CardView - Android
  • Espacio en blanco con CardView en dispositivos pre-pirulí
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.