Android 文本视图的动画';s文本大小,而不是整个文本视图
有没有办法只设置TextView文本大小的动画,而不缩放整个TextView的布局Android 文本视图的动画';s文本大小,而不是整个文本视图,android,android-layout,textview,Android,Android Layout,Textview,有没有办法只设置TextView文本大小的动画,而不缩放整个TextView的布局 我正在尝试实现类似的效果,请注意,文本大小变小时会重新调整为一行。这可以通过ValueAnimator实现,从我的头顶上看,我认为它应该是这样的: final TextView tv = new TextView(getApplicationContext()); final float startSize = 42; // Size in pixels final float endSize = 12; l
我正在尝试实现类似的效果,请注意,文本大小变小时会重新调整为一行。这可以通过
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();
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)
作为@korrekorre答案的后续说明:文档建议使用更简单的 这里只有一个警告:传递给构造函数的属性(
“textSize”
,在本例中)必须有一个公共setter方法才能工作
您还可以将
startSize
传递给构造函数,如果不传递,则插值器将使用当前大小作为起始点,使用Kotlin创建如下扩展函数:
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();
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)
像这样使用它:
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();
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)
使用ObjectAnimator/ValueAnimator@pskink更多详细信息会很有用。您是否尝试过设置TextView的固定最小高度
textView.setMinHeight()
@Kerry抱歉,这对动画有什么帮助?我误解了你的问题,我以为你不希望文本框的大小随着字体大小的改变而改变。更有效的解决方案!另一件需要注意的事情:TextView.getTextSize()
返回dp
中的大小,因此将其保留为默认值可能会产生不必要的效果。因此,可能需要通过tv.textSize/resources.displayMetrics.density将startSize
手动设置为“sp”。