LayoutTransition – Expandir un contenedor no empuja otros contenedores

Hola desarrolladores de Android!

Nota: todo el código al final de la publicación.

Quiero animar un ViewGroup siempre que una de sus vistas secundarias se vuelva visible con una suave animación de expansión. Con la ayuda de LayoutTransition , no hay ningún problema para esta animación de expansión / contracción.

Pero el problema es que el ViewGroup animado es parte de un LinearLayout "complejo".

ViewGroup's altura de este ViewGroup's se establece en wrap_content y otro ViewGroup , debajo del ViewGroup animado tiene una altura 0dp y un peso establecido en 1 para ajustar todo el espacio restante en la pantalla.

Cada vez que el ViewGroup animado se expande, ya que toma más espacio verticalmente, el ViewGroup inferior debe encogerse para dar al ViewGroup superior el espacio necesario para extender. Y quiero que este ViewGroup inferior se contraiga con una animación también.

Lo que no funciona es que el ViewGroup inferior se ViewGroup tamaño al instante cuando se inicia la animación en el primer ViewGroup . Intenté agregar un objeto de LayoutTransition al grupo inferior de ViewGroup oa la raíz global ViewGroup pero nada parece fijar el problema.

¿Alguien ya ha logrado hacer tal animación? Quiero que sea compatible con 4.0. (No LayoutTransition.CHANGING entonces …: s)

Gracias por la ayuda !

Código ahora:

My_activity.xml

 <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/layout_root" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_marginTop="@dimen/actionbar_height" android:background="@drawable/bg_texture_black" android:orientation="vertical"> <!-- This is the layout with the LayoutTransition instance --> <LinearLayout android:id="@+id/layout_header" android:layout_width="match_parent" android:layout_height="wrap_content" android:paddingLeft="@dimen/dimen_margin_xlarge" android:paddingRight="@dimen/dimen_margin_xlarge" android:paddingTop="@dimen/dimen_margin_medium" android:paddingBottom="@dimen/dimen_margin_medium" android:background="@drawable/bg_black_gradient_to_top" android:orientation="vertical"> <TextView android:layout_width="match_parent" android:layout_height="wrap_content" android:textColor="@android:color/white" android:textSize="@dimen/font_size_xxlarge" android:text="@string/text_my_documents"/> <!-- This is the layout with the extra content that is hidden/shown to trigger the animation --> <RelativeLayout android:id="@+id/layout_search_parameters" android:layout_width="match_parent" android:layout_height="wrap_content" android:visibility="gone"> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginTop="@dimen/dimen_margin_medium" android:textColor="@android:color/white" android:textSize="@dimen/font_size_medium" android:text="TEST"/> </RelativeLayout> </LinearLayout> <!-- The bottom layout that fit all the remaining space vertically --> <LinearLayout android:id="@+id/layout_central" android:layout_width="match_parent" android:layout_height="0dp" android:layout_weight="1" android:orientation="horizontal" android:background="@color/debug"> </LinearLayout> </LinearLayout> 

MyActivity.java:

 // activity initialization is hidden. This method is triggered whenever the title is clicked. It open the extra layout in the header ViewGroup. @TargetApi(Build.VERSION_CODES.HONEYCOMB) private void openSearchParametersView() { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.ICE_CREAM_SANDWICH) { LayoutTransition transitioner = new LayoutTransition(); transitioner.disableTransitionType(LayoutTransition.APPEARING); transitioner.setStartDelay(LayoutTransition.APPEARING, 0); transitioner.setStartDelay(LayoutTransition.DISAPPEARING, transitioner.getDuration(LayoutTransition.CHANGE_DISAPPEARING)); transitioner.setStartDelay(LayoutTransition.CHANGE_DISAPPEARING, 0); headerViewGroup.setLayoutTransition(transitioner); centralViewGroup.setLayoutTransition(new LayoutTransition()); // this does nothing :( } searchParametersView.setVisibility(View.VISIBLE); } 

FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.