有没有办法只为TextView的文字大小设置动画而不缩放整个TextView的布局?
我试图达到类似效果,请注意文字在尺寸变小时重新调整为一行。
答案 0 :(得分:31)
这可以通过ValueAnimator
实现,从我的头脑中我认为应该看起来像这样:
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();
答案 1 :(得分:2)
作为@korrekorre的后续回答:文档建议使用更简单的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();
只有一点需要注意:传递给构造函数的属性(在这种情况下为"textSize"
)必须具有公共setter方法才能使其生效。
你也可以将startSize
传递给构造函数,如果你没有,那么插值器将使用当前大小作为起点
答案 2 :(得分:1)
答案 3 :(得分:-1)
使用Kotlin,创建扩展功能,如下所示:
fun TextView.sizeScaleAnimation(endSize: Float, durationInMilliSec: Long) {
val animator = ObjectAnimator.ofFloat(this, "textSize", endSize)
animator.duration = durationInMilliSec
animator.start()
}
像这样使用它:
val endSize = resources.getDimension(R.dimen.my_new_text_size)
myTextView.sizeScaleAnimation(endSize, 200L)