Vous pouvez utiliser le système d'animation des vues pour effectuer une animation interpolée sur les vues. Animation d'interpolation calcule l'animation à l'aide d'informations telles que le point de départ, le point d'arrivée, la taille, la rotation et d'autres aspects courants d'une animation.
Une animation d'interpolation peut effectuer une série de transformations simples (position, taille, rotation,
et transparence) sur le contenu d'un objet View. Ainsi, si vous disposez d'un objet TextView
, vous pouvez déplacer, faire pivoter, agrandir ou réduire le texte. Si un
l'image de fond est transformée en même temps que le texte. animation package
fournit toutes les classes utilisées dans une animation d'interpolation.
Une séquence d'instructions d'animation définit l'animation d'interpolation, définie par XML ou
Code Android. Comme pour la définition d'une mise en page,
un fichier XML est recommandé, car il est plus lisible,
réutilisable et interchangeable
plutôt que de coder en dur l'animation. Dans l'exemple ci-dessous, nous utilisons XML. (À
Pour en savoir plus sur la définition d'une animation dans le code de votre application, consultez la
AnimationSet
et d'autres sous-classes Animation
.)
Les instructions d'animation définissent les transformations que vous souhaitez effectuer, à quel moment et combien de temps cela devrait prendre pour les appliquer. Les transformations peuvent être séquentielles ou simultanées - Par exemple, vous pouvez déplacer le contenu d'un TextView de gauche à droite, puis le faire pivoter. 180 degrés, ou vous pouvez déplacer le texte et le faire pivoter simultanément. Chaque transformation prend ensemble de paramètres spécifiques à cette transformation (taille de début et taille de fin pour la taille l'angle de départ et l'angle d'arrivée pour la rotation, etc.), ainsi qu'un ensemble (par exemple, l'heure de début et la durée). Pour effectuer plusieurs transformations simultanément, leur donner la même heure de début ; pour qu'elles soient séquentielles, calculez l'heure de début plus la durée de la transformation précédente.
Le fichier XML d'animation se trouve dans le répertoire res/anim/
de votre application Android
projet. Le fichier doit comporter un seul élément racine: il s'agit d'un seul
<alpha>
, <scale>
, <translate>
<rotate>
, un élément d'interpolateur ou un élément <set>
qui contient
groupes de ces éléments (qui peuvent inclure un autre <set>
). Par défaut, tous les
les instructions d'animation sont appliquées simultanément. Pour qu'ils soient exécutés de manière séquentielle, vous devez
spécifiez l'attribut startOffset
, comme illustré dans l'exemple ci-dessous.
Le code XML suivant de l'une des ApiDemos est utilisé pour étirer, puis faire tourner et faire pivoter un objet View.
<set android:shareInterpolator="false"> <scale android:interpolator="@android:anim/accelerate_decelerate_interpolator" android:fromXScale="1.0" android:toXScale="1.4" android:fromYScale="1.0" android:toYScale="0.6" android:pivotX="50%" android:pivotY="50%" android:fillAfter="false" android:duration="700" /> <set android:interpolator="@android:anim/decelerate_interpolator"> <scale android:fromXScale="1.4" android:toXScale="0.0" android:fromYScale="0.6" android:toYScale="0.0" android:pivotX="50%" android:pivotY="50%" android:startOffset="700" android:duration="400" android:fillBefore="false" /> <rotate android:fromDegrees="0" android:toDegrees="-45" android:toYScale="0.0" android:pivotX="50%" android:pivotY="50%" android:startOffset="700" android:duration="400" /> </set> </set>
Les coordonnées de l'écran (non utilisées dans cet exemple) sont (0,0) dans l'angle supérieur gauche, et augmenter au fur et à mesure que vous descendez et vers la droite.
Certaines valeurs, telles que pivotX, peuvent être spécifiées par rapport à l'objet lui-même ou par rapport à la parent. Veillez à utiliser le format adapté à ce que vous souhaitez ("50" pour 50% par rapport au parent, ou "50 %" pour 50% par rapport à lui-même).
Vous pouvez déterminer comment une transformation est appliquée au fil du temps en attribuant un Interpolator
. Android inclut plusieurs sous-classes d'interpolateur qui
spécifier différentes courbes de vitesse (par exemple, AccelerateInterpolator
) ;
indique à une transformation de commencer lentement et de l'accélérer. Chacune d'entre elles possède une valeur d'attribut
appliquée dans le code XML.
Avec ce fichier XML enregistré sous le nom hyperspace_jump.xml
dans res/anim/
du projet, le code suivant le référencera et l'appliquera à un objet ImageView
de la mise en page.
Kotlin
AnimationUtils.loadAnimation(this, R.anim.hyperspace_jump).also { hyperspaceJumpAnimation -> findViewById<ImageView>(R.id.spaceshipImage).startAnimation(hyperspaceJumpAnimation) }
Java
ImageView spaceshipImage = (ImageView) findViewById(R.id.spaceshipImage); Animation hyperspaceJumpAnimation = AnimationUtils.loadAnimation(this, R.anim.hyperspace_jump); spaceshipImage.startAnimation(hyperspaceJumpAnimation);
Au lieu de startAnimation()
, vous pouvez définir une heure de début pour
l'animation avec
, puis affectez-la à la vue avec Animation.setStartTime()
.View.setAnimation()
Pour en savoir plus sur la syntaxe XML, ainsi que sur les balises et les attributs disponibles, consultez la section Ressources d'animation.
Remarque:Quel que soit le déplacement ou le redimensionnement de votre animation, les les limites de la vue qui contient votre animation ne s'ajusteront pas automatiquement pour s'adapter à celle-ci. Néanmoins, l'animation reste dessinée au-delà des limites de sa vue et n'est pas rognée. Toutefois, un rognage se produit si l'animation dépasse les limites de la vue parent.