Cambiar el tamaño de los diseños de forma programática (como animación)

Quiero cambiar el tamaño de algunos diseños en mi actividad.

Aquí está el código del XML principal:

<LinearLayout android:layout_width="fill_parent" android:layout_height="fill_parent" android:layout_weight="1" android:orientation="vertical" > <LinearLayout android:id="@+id/top" android:layout_width="fill_parent" android:layout_height="0dip" android:layout_weight="1" android:background="#3ee3e3" > </LinearLayout> <LinearLayout android:id="@+id/middle" android:layout_width="fill_parent" android:layout_height="fill_parent" android:layout_weight="1"> </LinearLayout> <LinearLayout android:id="@+id/bottom" android:layout_width="fill_parent" android:layout_height="0dip" android:layout_weight="1" android:background="#fe51e6" > </LinearLayout> </LinearLayout> 

Como puede ver, la altura de los diseños superior e inferior es 0, y el diseño medio cubre todo el lugar.

Quiero disminuir programaticamente el tamaño de diseño medio, mientras que aumentar tanto el tamaño de la parte superior e inferior tamaños de diseño, hasta que todos los diseños tienen la misma altura.

Quiero que parezca una animación.

¿Cómo debo hacer eso?

Gracias

Escribí una ResizeAnimation con un propósito similar. Es simple pero costoso.

 /** * an animation for resizing the view. */ public class ResizeAnimation extends Animation { private View mView; private float mToHeight; private float mFromHeight; private float mToWidth; private float mFromWidth; public ResizeAnimation(View v, float fromWidth, float fromHeight, float toWidth, float toHeight) { mToHeight = toHeight; mToWidth = toWidth; mFromHeight = fromHeight; mFromWidth = fromWidth; mView = v; setDuration(300); } @Override protected void applyTransformation(float interpolatedTime, Transformation t) { float height = (mToHeight - mFromHeight) * interpolatedTime + mFromHeight; float width = (mToWidth - mFromWidth) * interpolatedTime + mFromWidth; LayoutParams p = mView.getLayoutParams(); p.height = (int) height; p.width = (int) width; mView.requestLayout(); } } 

En Honeycomb (Android 3.0) hay las clases Animator y ObjectAnimator para animaciones más suaves.

Léalo aquí

Ejemplo de cómo animar el movimiento de un grupo de vistas (LinearLayout) con un interpolador de rebote.

 BounceInterpolator bounceInterpolator = new BounceInterpolator(); ObjectAnimator anim = ObjectAnimator.ofFloat(myViewGroup, "translationY", 0f, -200 ); anim.setInterpolator(bounceInterpolator); anim.setDuration(1100).start(); 

Esto activará una animación suave con un efecto de rebote y realmente moverá las vistas no como animación antes de Honeycomb. De los documentos:

Las animaciones anteriores cambiaron el aspecto visual de los objetos de destino … pero no cambiaron los objetos.

  • Inserción de una vista de texto en medio de una vista de imagen de Android
  • ¿Por qué mi WebView no llena el ancho completo de mi pantalla?
  • Android PhoneGap con controles nativos
  • Aplicación de pantalla completa en Android: ¿una buena práctica?
  • Cajón de navegación con borde curvo en Android
  • Android ScrollView layout (wrap_content, tamaño máximo)
  • Diseño de motor de juego para Android: ¿cómo sincronizar el bucle de juego y el hilo de actualización de la galería?
  • ¿Cómo evito que EditText cambie de tamaño cuando el usuario está escribiendo?
  • Desplazar una vista / disposición oculta desde abajo
  • Vista personalizada para ActionBar.Tab no se muestra correctamente
  • Android: uso del diseño XML desde el almacenamiento interno
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.