2017-09-02 3 views
0

J'essaie ValueAnimator mais je ne peux pas lui affecter plusieurs propriétés.Comment définirPadding pour afficher à l'aide d'une animation?

ValueAnimator animate = ValueAnimator.ofInt(leftO, left, topO, top, rightO, right, bottomO, bottom); 
    animate.setDuration(250); 
    animate.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() { 
     @Override 
     public void onAnimationUpdate(ValueAnimator valueAnimator) { 
      greenTarget.setPadding(valueAnimator.getAnimatedValue(), ? ? ?); 
     } 
    }); 
    animate.start(); 

Alors, comment le faire? Peut-être que l'utilisation ObjectAnimator à la place? Si c'est le cas, comment définir Padding?

Répondre

0
ValueAnimator animator = ValueAnimator.ofInt(view.getPaddingRight(), _20dp); 
animator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() 
{ 
    @Override 
    public void onAnimationUpdate(ValueAnimator valueAnimator){ 
    view.setPadding(_6dp, _6dp, (Integer) 
    valueAnimator.getAnimatedValue(), 0); 
    } 
}); 
animator.setDuration(200); 
animator.start(); 
+0

J'ai besoin de mettre à jour 4 paddings à la fois. Ici, vous n'en mettez qu'un seul à jour. – Tryam

+0

setPadding (gauche, haut, droite, bas) –

+0

Si vous voulez le faire en écoutant, vous avez tort. Parce que là nous pouvons utiliser seulement la valeur calculée, comme 'getAnimatedValue()'. Nous ne pouvons pas utiliser les valeurs finales telles que gauche, haut, etc. – Tryam

0

Vous pouvez essayer d'utiliser la TransitionManager qui permettent l'animation entre le début des attributs valeurs (valeurs définies dans le fichier XML par exemple) et les valeurs modifiées (définies par programmation par exemple).

Vous avez besoin de la mise en page de racine de votre xml, je peux nommer ici mViewGroup et le type de mise en page du parent direct de la vue Animer, par exemple un LinearLayout:

TransitionManager.beginDelayedTransition(mViewGroup, new ChangeBound()); 

LinearLayout.LayoutParams params = (LinearLayout.LayoutParams) greenTarget.getLayoutParams(); 
params.setPadding(left, top, right, bottom); 
greenTarget.setLayoutParams(params); 

Hope this helps.