web-dev-qa-db-fra.com

Animation de la taille du texte d'un TextView et non de la totalité de TextView

Existe-t-il un moyen d'animer uniquement la taille du texte de TextView sans mettre à l'échelle la mise en page complète de TextView?

enter image description here

J'essaie d'obtenir un effet similaire. Notez que le texte est redimensionné en une seule ligne alors que sa taille est réduite.

14
cozeJ4

Ceci pourrait être réalisé avec un ValueAnimator et je pense que cela devrait ressembler à quelque chose comme ceci:

final TextView tv = new TextView(getApplicationContext());

final float startSize = 42; // Size in pixels
final float endSize = 12;
long animationDuration = 600; // Animation duration in ms

ValueAnimator animator = ValueAnimator.ofFloat(startSize, endSize);
animator.setDuration(animationDuration);

animator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
    @Override
    public void onAnimationUpdate(ValueAnimator valueAnimator) {
        float animatedValue = (float) valueAnimator.getAnimatedValue();
        tv.setTextSize(animatedValue);
    }
});

animator.start();
31
korrekorre

Pour donner suite à la réponse @korrekorre: la documentation suggère d’utiliser l’API plus simple API ObjectAnimator

final TextView tv = new TextView(getApplicationContext());

final float endSize = 12;
final int animationDuration = 600; // Animation duration in ms

ValueAnimator animator = ObjectAnimator.ofFloat(tv, "textSize", endSize);
animator.setDuration(animationDuration);

animator.start();    

Il y a juste un avertissement: la propriété que vous transmettez au constructeur ("textSize" dans ce cas) must doit avoir une méthode de définition publique pour que cela fonctionne.

Vous pouvez également passer une variable startSize au constructeur. Sinon, l'interpolateur utilisera la taille actuelle comme point de départ.

1
Nicolás Carrasco

vous pouvez essayer avec cela les bibliothèques:

Première bibliothèque

Deuxième bibliothèque

1
Aspicas