2015-05-19 15 views
12

Czy istnieje sposób na animowanie tylko rozmiaru tekstu TextView bez skalowania całego układu TextView?Animacja rozmiaru tekstu Android TextView, a nie całego TextView

enter image description here

staram się osiągnąć podobny efekt, Uwaga tekście ponownych rozmiary do jednej linii, a jego rozmiar będzie mniejszy.

+0

użycie ObjectAnimator/ValueAnimator – pskink

+0

@pskink trochę więcej szczegółów będzie pomocny – cozeJ4

+0

Próbowałeś ustalanie stałej minimalnej wysokości TextView? 'textView.setMinHeight()'. – Kerry

Odpowiedz

23

Można to osiągnąć za pomocą ValueAnimator iz mojej głowie Myślę, że powinno to wyglądać mniej więcej tak:

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(); 
0

W odpowiedzi na @korrekorre odpowiedź: Dokumentacja sugeruje użycie prostszego ObjectAnimator API

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();  

Jest tylko jedno zastrzeżenie: Właściwość przekazać do konstruktora ("textSize" w tym przypadku) musi mają metody setter publicznej dla tej pracy.

Można również przekazać startSize do konstruktora, jeśli nie wtedy interpolator użyje obecnego rozmiaru jako punktu startowego

Powiązane problemy