AnimateLayoutChanges no funciona bien con el diseño anidado?

Tengo un diseño anidado como el siguiente:

<LinearLayout> <!----Parent layout---> <LinearLayout> <!-----child 1---> ... </LinearLayout> <!----child 1 ended---> <LinearLayout> <!-----child 2---> ... </LinearLayout> <!----child 2 ended---> </LinearLayout> <!----Parent endded---> 

El problema que tengo ahora es que ya que todos mis elementos de datos están dentro del niño 1 o del niño 2 Linearlayout , si agrego o elimino un elemento, el linelay secundario se animará con el efecto de animateLayoutChanges pero el diseño padre no hará ninguna animación. (Tengo android:animateLayoutChanges establecido en true para todos los diseños lineales). Especialmente cuando elimino un elemento dentro del niño 1, el efecto de animación se vuelve raro (básicamente, el niño 2 saltará mientras el niño 1 sigue haciendo su animación).

¿Alguien tiene alguna idea de cómo resolver esto?

Gracias

ACTUALIZAR

Poco después de que publicara esta pregunta, encontré esto en el sitio de desarrolladores de android en la API LayoutTransition.

El uso de LayoutTransition en varios niveles de una jerarquía de vistas anidadas puede no funcionar debido a la interrelación de los distintos niveles de diseño.

¿Así que alguien tiene algún trabajo alrededor de sugerencias para este problema?

La propiedad animateLayoutChanges utiliza LayoutTransitions , que animan tanto a los niños del diseño como, desde Android 4.0 en adelante, a los antepasados ​​de la jerarquía de diseño hasta la parte superior del árbol. En Honeycomb, sólo los niños del diseño serán animados. Consulta la publicación de este blog de desarrolladores de Android para obtener más información.

Desafortunadamente, parece que actualmente no existe una manera simple de que los hermanos de un diseño reaccionen a LayoutTransitions . Usted podría intentar usar un TransitionListener para ser notificado cuando se cambian los límites del diseño, y mover las vistas del hermano en consecuencia utilizando animadores. Vea la segunda respuesta de Chet Haase en esta publicación de Google+ .

EDIT – Resulta que hay un camino. En Android 4.1+ (API nivel 16+) puede utilizar un tipo de transición de diseño CHANGING , que está desactivado de forma predeterminada. Para habilitarlo en el código:

 ViewGroup layout = (ViewGroup) findViewById(R.id.yourLayout); LayoutTransition layoutTransition = layout.getLayoutTransition(); layoutTransition.enableTransitionType(LayoutTransition.CHANGING); 

Por lo tanto, en su ejemplo, para que el dibujo del niño 2 esté animado, necesitará habilitar la transformación del diseño CHANGING para él. La transformación entonces sería aplicada cuando hay un cambio en los límites de su padre.

Vea este video de DevBytes para más detalles.

Parece que una transición tardía en el padre también funciona para animar. Al menos para mí el siguiente código da una adecuada expansión / colapso animación.

 expandTrigger.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { TransitionManager.beginDelayedTransition(parentLayout); expanded = !expanded; child1.setVisibility(expanded ? View.VISIBLE : View.GONE); } }); 

Para diseños profundamente anidados, a veces es posible que necesite utilizar un padre más arriba en la jerarquía en la llamada al TransitionManager .

Hemos añadido el atributo android: animateLayoutChanges a nuestro LinearLayout pero el cambio no desencadenó una animación. Para corregir eso, utilice este código:

 if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) { ((ViewGroup) findViewById(R.id.llRoot)).getLayoutTransition() .enableTransitionType(LayoutTransition.CHANGING); } 

Más detalles .

  • WebView Atrás, Actualizar, Reenviar? Simplemente no funciona!
  • ? Android: attr / selectableItemBackground
  • Desplácese la página cuando el teclado suaves aparece
  • Cambiar la separación entre el grupo de encabezados y el primer elemento
  • Vínculos con varios clics en TextView en Android
  • Match_parent propiedad para los niños en un RelativeLayout
  • ¿Utilizar BottomBar evita que se abran fragmentos?
  • Cómo hacer el nuevo efecto de paralaje de PlayStore
  • ¿Por qué findViewById (...) devuelve null?
  • Cómo establecer algunas imeOptions mediante programación
  • Forzar Android Fast Scroll Bar en ListViews para dibujar dentro de relleno
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.