web-dev-qa-db-fra.com

Comment puis-je animer une vue dans Android et la laisser dans la nouvelle position / la nouvelle taille?)

J'ai actuellement une vue dans mon application Android et cette vue lit une animation par cadre. Je souhaite animer la vue pour augmenter sa taille à 150%. Lorsque j'applique une animation d'échelle et que l'animation est terminée, je souhaite que la vue reste à cette nouvelle taille pour le reste du cycle de vie de l'activité. Malheureusement, à l'heure actuelle, lorsque l'animation d'échelle est terminée, la vue revient à la taille d'origine. Comment puis-je l'obtenir pour conserver la nouvelle transformation animée?

J'utilise

myView.startAnimation(AnimationUtils.loadAnimation(mContext,R.anim.scaleUp150));

Merci!

80
justinl

Assurez-vous d’ajouter les attributs ci-dessous au élément racine dans votre animation xml:

Android:fillAfter="true" 
Android:fillEnabled="true"
148
Qlimax

essayez de construire l'animation à partir de code et de définir les propriétés comme ceci

anim.setFillEnabled(true);
anim.setFillAfter(true);
52
Mina Samy

si vous voulez mettre votre animation dans un fichier XML , il vous faudra peut-être ceci pour vous aider:

<set
Android:fillEnabled="true"
Android:fillAfter="true"
xmlns:Android="http://schemas.Android.com/apk/res/Android">

<translate
    Android:fromYDelta="0"
    Android:toYDelta="-20%p"
    Android:duration="7000" />

</set>

https://stackoverflow.com/a/6519233/371749

s'il vous plaît également apprécier l'autre réponse, m'a aidé :) bonne chance!

30
cV2

De nos jours, c'est devenu très facile:

view.animate().x(valueX).y(valueY).setDuration(500).start();

(Dans cet extrait, ViewPropertyAnimator a été utilisé).

Il est possible d'ajouter plusieurs autres options non plus.

La vue sera située dans la nouvelle position.

19
Andrey

EDIT: La réponse de Qlimax est meilleure, mais comme le PO n’est pas revenu pour changer de coche et que je ne peux pas supprimer une réponse acceptée, je la recopierai ici: définissez simplement fillAfter = true fillEnabled = true

Ma réponse initiale (qui fonctionne mais qui est légèrement ridicule par comparaison) est la suivante:

Pour que les choses fonctionnent comme prévu après l'animation, au moins selon ce fil , vous devrez écrire un gestionnaire onAnimationEnd, puis ajuster manuellement le "réel" ( -transformation) de votre vue pour correspondre au résultat final de l'animation de la balance.

2
Walter Mundt

En fait, l'animation que vous utilisez semble être intégrée dans le cadre Android), et je ne suis pas sûr que vous puissiez y changer quoi que ce soit.
Cependant, vous pouvez créer votre propre animation en suivant l'exemple dans la documentation . Et vous devrez mettre Android: fillAfter = "true" si vous voulez que la mise à l'échelle soit conservée après la fin de l'animation.

1
Sephy

Mettez Android: fillAfter = "true" dans la balise SET, car les placer dans la balise animation les confinera aux "paramètres de transition" ou à "pendant/tout en animant des paramètres". Les paramètres du SET appliqueront la transformation que vous recherchez une fois les animations terminées.

1
takrishna