11
votes

Comment chaîner une animation à Android à la même vue?

J'ai des vues de texte et je veux faire l'effet Buzz de MSN.

Mon plan est:

  • Prenez la vue, laissez 10DIP à gauche,
  • Retournez-le à sa position de départ
  • Après cela le prenez 10DIP up
  • retour ensuite
  • DOWN BACK
  • laissé ... et ainsi de suite.

    Mon point est que j'ai une séquence de mouvements que je veux définir sur une vue et que cela doit s'exécuter l'un après l'autre.

    Comment puis-je faire ça?


0 commentaires

3 Réponses :


-1
votes

Utilisez un Animationset :

AnimationSet set = new AnimationSet(true);

Animation animation = new AlphaAnimation(0.0f, 1.0f);
animation.setDuration(100);
set.addAnimation(animation);

animation = new TranslateAnimation(
    Animation.RELATIVE_TO_SELF, 0.0f, Animation.RELATIVE_TO_SELF, 0.0f,
    Animation.RELATIVE_TO_SELF, -1.0f, Animation.RELATIVE_TO_SELF, 0.0f
);
animation.setDuration(500);
set.addAnimation(animation);

view.startAnimation( set );


8 commentaires

Quoi??? C'est faux, animationet anime ses animations enfants ensemble. "Animationset: représente un groupe d'animations qui devraient être jouées ensemble."


Animationsset effectue des animations asynchrones. Pour atteindre l'effet souhaité, vous devez utiliser des animationset.setStartOffsetOffset () dans la deuxième animation


Cette réponse n'est pas correcte. Les animations vont se lancer simultanément.


Je suis d'accord, cette réponse est juste fausse. Mais je ne peux pas le supprimer car il a été accepté ... @Lukap, veuillez l'accepter.


Il suffit d'essayer des animationset et de ne pas chaîner une animation. Ils sont exécutés en même temps. Cette réponse est fausse.


Pouvez-vous au moins le modifier? C'est vraiment déroutant.


Je ne peux pas le supprimer ni comme ça n'a été accepté ... @Lukap, s'il vous plaît, n'acceptez-le et de me ping me.


Ceci est en effet parfaitement utilisable: `animation.duration = 100; animup.duration = 300; animup.startoffset = animationdown.duration; val ensemble = animationet (vrai); set.addanimation (animation); set.addanimation (animup); View.startanimation (Set); `



29
votes

Vous voulez probablement dire animateur (pas Animationset ). Comme écrit dans la documentation:

Cette classe joue un ensemble d'animateurs d'animateur dans la commande spécifiée . Les animations peuvent être configurées pour jouer ensemble, en séquence ou après un délai spécifié.

Il existe deux approches différentes pour ajouter des animations à un animateur: soit le PlaytOtoGether () ou ultérieurement () Les méthodes peuvent être appelées à ajouter un ensemble d'animations tout à Une fois ou la lecture (animateur) peut être utilisée conjointement avec des méthodes dans la classe de la classe pour ajouter des animations un par un.

Animation qui déplace Voir par -100px pour 700ms puis disparaît pendant 300ms : xxx


1 commentaires

N'OUBLIEZ PAS AnimAset.Start ()



0
votes

J'ai les débuts d'une classe compatible SDK 15 pouvant être utilisée pour construire des chaînes d'animation complexes, espérons que cela aide quelqu'un. Vous devriez être capable de suivre le modèle de conception pour ajouter vos propres méthodes. Si vous faites, veuillez les commenter ici et je mettrai à jour la réponse, acclamations!

package com.stuartclark45.magicmatt.util;

import java.util.LinkedList;
import java.util.List;

import android.animation.Animator;
import android.animation.AnimatorSet;
import android.animation.ObjectAnimator;
import android.view.View;

    /**
     * Used to build complex animations for a view. Example usage bellow makes view move out to the
     * right whilst rotating 45 degrees, then move out to the left.
     *
     * {@code
     *  int rotateDuration = 200;
     *  int rotation = 45;
     *  new AnimationBuilder(view)
     *    .translationX(100, rotateDuration)
     *    .rotateTo(rotation, rotateDuration)
     *    .then()
     *    .translationX(-200, rotateDuration)
     *    .start();
     * }
     *
     * @author Stuart Clark
     */

    public class AnimationBuilder {

      private View view;
      private List<Animator> setsList;
      private List<Animator> buildingList;

      public AnimationBuilder(View view) {
        this.view = view;
        this.setsList = new LinkedList<>();
        this.buildingList = new LinkedList<>();
      }

      public AnimationBuilder rotateTo(float deg, long duration) {
        buildingList.add(ObjectAnimator.ofFloat(view, "rotation", deg).setDuration(duration));
        return this;
      }

      public AnimationBuilder translationX(int deltaX, long duration) {
        buildingList.add(ObjectAnimator.ofFloat(view, "translationX", deltaX).setDuration(duration));
        return this;
      }

      public AnimationBuilder translationY(int deltaX, long duration) {
        buildingList.add(ObjectAnimator.ofFloat(view, "translationY", deltaX).setDuration(duration));
        return this;
      }

      public AnimationBuilder then() {
        createAniSet();
        // Reset the building list
        buildingList = new LinkedList<>();
        return this;
      }

      public void start() {
        createAniSet();
        AnimatorSet metaSet = new AnimatorSet();
        metaSet.playSequentially(setsList);
        metaSet.start();
      }

      private void createAniSet() {
        AnimatorSet aniSet = new AnimatorSet();
        aniSet.playTogether(buildingList);
        setsList.add(aniSet);
      }


    }


0 commentaires