Redimensionnement des modèles par programmation (en tant qu’animation)

Je souhaite redimensionner certaines dispositions de mon activité.

Voici le code du XML principal:

        

Comme vous pouvez le voir, la hauteur des mises en page supérieure et inférieure est égale à 0 et la disposition centrale couvre toute la place.

Je veux diminuer par programmation la taille de la mise en page intermédiaire, tout en augmentant les tailles de mise en page supérieure et inférieure, jusqu’à ce que toutes les mises en page aient la même hauteur.

Je veux que ça ressemble à une animation.

Comment devrais-je faire ça?

Merci

J’ai écrit un ResizeAnimation pour un but similaire. C’est simple mais coûteux.

 /** * 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(); } } 

Sur Honeycomb (Android 3.0), il existe les classes Animator et ObjectAnimator pour des animations plus fluides.

Lisez-le ici

Exemple sur la façon d’animer le déplacement d’un groupe de vues (LinearLayout) avec un interpolateur de rebond.

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

Cela déclenchera une animation fluide avec un effet de rebond et déplacera vraiment les vues comme si elles ne l’étaient pas avant Honeycomb. De la documentation:

Les animations précédentes ont changé l’apparence visuelle des objects cibles … mais elles n’ont pas réellement modifié les objects eux-mêmes.

Vous pouvez également redimensionner avec les nouvelles animations de spring de Google.

Méthode de création 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 } 

Utilisation (Redimensionnez à 80% de la taille de la vue d’origine.)

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