2017-09-25 3 views
0

Espérons que je ne suis pas en train de dupliquer une question ici; Je ne pouvais pas en trouver un sur plusieurs ViewPropertyAnimators. Le but est d'avoir une vue animée de y1 à y2 en 8 secondes. S'éclipser dans la première seconde, puis disparaître à la dernière seconde.Multiple ViewPropertyAnimators

Voici ce que j'ai essayé dans mon activité onCreate():

final View animatingView = findViewById(R.id.animateMe); 


    animatingView.post(new Runnable() { 
     @Override 
     public void run() { 
      //Translation 
      animatingView.setY(0); 
      animatingView.animate().translationY(800).setDuration(8000); 

      //Fading view in 
      animatingView.setAlpha(0f); 
      animatingView.animate().alpha(1f).setDuration(1000); 

      //Waiting 6 seconds and then fading the view back out 
      new Handler().postDelayed(new Runnable() { 
       @Override 
       public void run() { 
        animatingView.animate().alpha(0f).setDuration(1000); 
       } 
      }, 6000); 
     } 
    }); 

Cependant, le résultat est une traduction 0-800 et alpha de 0 à 1 en une seule seconde. puis 6 secondes plus tard, la vue s'estompe. Il ressemble à chaque fois que j'appelle View.animate() il renvoie le même ViewPropertyAnimator. Y a-t-il un moyen d'en avoir plusieurs? Je pensais à animer l'alpha de la vue, à imbriquer la vue dans une mise en page relative, puis à animer la traduction des mises en page relatives. Je préférerais ne pas suivre cette route si je n'ai pas à le faire. Est-ce que quelqu'un sait d'une meilleure solution?

Répondre

1

Vous pouvez résoudre ce problème en utilisant directement les instances ObjectAnimator au lieu d'utiliser l'abstraction .animate().

ObjectAnimator translationY = ObjectAnimator.ofFloat(animatingView, "translationY", 0f, 800f); 
translationY.setDuration(8000); 

ObjectAnimator alpha1 = ObjectAnimator.ofFloat(animatingView, "alpha", 0f, 1f); 
alpha1.setDuration(1000); 

ObjectAnimator alpha2 = ObjectAnimator.ofFloat(animatingView, "alpha", 1f, 0f); 
alpha2.setDuration(1000); 
alpha2.setStartDelay(7000); 

AnimatorSet set = new AnimatorSet(); 
set.playTogether(translationY, alpha1, alpha2); 
set.start();