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?
J'essaie d'obtenir un effet similaire. Notez que le texte est redimensionné en une seule ligne alors que sa taille est réduite.
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();
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.