web-dev-qa-db-fra.com

Android animation de la propriété: comment augmenter la hauteur de vue?

Comment augmenter la hauteur de vue en utilisant Property Animations dans Android?

ObjectAnimator a = ObjectAnimator.ofFloat(viewToIncreaseHeight, "translationY", -100);
a.setInterpolator(new AccelerateDecelerateInterpolator());
a.setDuration(1000);
a.start();

La translationY déplace réellement la vue sans augmenter la hauteur. Comment puis-je augmenter la hauteur de la vue?

48
g.revolution
ValueAnimator anim = ValueAnimator.ofInt(viewToIncreaseHeight.getMeasuredHeight(), -100);
anim.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
    @Override
    public void onAnimationUpdate(ValueAnimator valueAnimator) {
        int val = (Integer) valueAnimator.getAnimatedValue();
        ViewGroup.LayoutParams layoutParams = viewToIncreaseHeight.getLayoutParams();
        layoutParams.height = val;
        viewToIncreaseHeight.setLayoutParams(layoutParams);
    }
});
anim.setDuration(DURATION);
anim.start(); 
109
rajan ks

Vous pouvez utiliser ViewPropertyAnimator , ce qui peut vous faire économiser quelques lignes de code:

yourView.animate().scaleY(-100f).setInterpolator(new AccelerateDecelerateInterpolator()).setDuration(1000);

assurez-vous de vérifier la documentation et toutes les méthodes disponibles pour ViewPropertyAnimator .

17
A Honey Bustard

Ce n'est pas une réponse directe à cette question. Cependant, cela peut aider quelqu'un.

Parfois, nous souhaitons augmenter/diminuer la hauteur de la vue car une partie de son enfant est en train d'être ajoutée/supprimée (ou devient tout simplement visible/disparue).

Dans ces cas, vous pouvez vraiment utiliser Android l'animation par défaut. Comme indiqué dans d'autres réponses, vous pouvez définir via:

<LinearLayout
    ...
    Android:animateLayoutChanges="true"
.../>

Ou en Java:

linearLayout.setLayoutTransition(new LayoutTransition());

Si vous avez créé une vue personnalisée:

public StickerPickerView(final Context context, final AttributeSet attrs,
        final int defStyleAttr) {
    super(context, attrs, defStyleAttr);
    setLayoutTransition(new LayoutTransition());
}

Pour moi, c'était assez satisfaisant mais je viens de tester les dernières API. Cela ajoutera automatiquement un fondu entrant/sortant lorsque votre vue deviendra visible. Il animera également la hauteur/largeur de votre vue lorsque les mêmes modifications (par exemple, lorsque vous modifiez la visibilité de l'une des vues enfants, etc.).

Donc, je recommande au moins d'essayer.

1
W0rmH0le