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:
- Cómo utilizar RecyclerView y CardView
- Recyclerview lag en desplazamiento debido a los anuncios de Admob
- Acolchado CardView y esquinas redondeadas
- ¿Cómo puedo hacer que WRAP_CONTENT funcione en un RecyclerView
- Cardview no respeta el orden del índice z en el diseño relativo
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)
- Los elementos de RecyclerView no llenan el ancho
- Cómo traer imageView delante de cardview? Cuando ambos son de Disposición Relativa childs
- ¿Cómo manejar el botón OnClick del evento de tarjeta en GridView? Mejores prácticas
- Adjuntar estilo CardView personalizado al tema
- ¿El relleno innecesario en CardView?
- ¿Por qué no hay espacio entre CardViews en Lollipop?
- Obtener el ancho de CardView en Adapter.onBindViewHolder
- Excepción: android.view.InflateException: Línea de archivo XML binario # 2: Error al inflacionar la clase android.support.v7.widget.CardView
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.
- Android java.lang.NoClassDefFoundError: org.bouncycastle.crypto.engines.AESEngine api 16
- Configurar los juegos libgdx para que sean "diseñados para tabletas"