Redimensionamiento de diseños mediante progtwigción (como animación)

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

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

        

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

Deseo disminuir el tamaño del diseño del medio en forma programática, al mismo tiempo que aumente los tamaños de diseño superior e inferior, hasta que todos los diseños tengan la misma altura.

Quiero que se vea como una animación.

¿Cómo debo hacer eso?

Gracias

Escribí ResizeAnimation para 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) existen las clases Animator y ObjectAnimator para animaciones más ObjectAnimator .

Léelo aquí

Ejemplo sobre cómo animar el movimiento de un grupo de vista (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 desencadenará una animación suave con un efecto de rebote y realmente moverá las vistas no como la animación antes de Honeycomb. De los documentos:

Las animaciones anteriores cambiaron la apariencia visual de los objetos objective … pero en realidad no cambiaron los objetos mismos.

También puede cambiar el tamaño con las nuevas animaciones de spring de Google.

Método de creación de SpringAnimation:

 fun getSpringAnimation(view: View, springAnimationType: FloatPropertyCompat, finalPosition: Float): SpringAnimation { val animation = SpringAnimation(view, springAnimationType ) // create a spring with desired parameters val spring = SpringForce() spring.finalPosition = finalPosition spring.stiffness = SpringForce.STIFFNESS_VERY_LOW // optional spring.dampingRatio = SpringForce.DAMPING_RATIO_NO_BOUNCY // optional // set your animation's spring animation.spring = spring return animation } 

Uso (Cambie el tamaño al 80% del tamaño de la vista original).

  getSpringAnimation(view, SpringAnimation.SCALE_X, 0.8f).start() getSpringAnimation(view, SpringAnimation.SCALE_Y, 0.8f).start()