如何更改非 sp 比例的字体大小?

How to change font size in non-sp scale?

我正在尝试为 TextView 的字体比例设置动画(例如从 14sp 到 22sp),但它仅按 1sp 缩放并且它会改变 ansty。不知道如何更正确地解释,而且看起来 TextView 在改变大小时会滞后,但事实并非如此。

我尝试使用标准方法 setTextSize(float size) 以及 setTextSize(int units, float size) 像素,但没有任何改变。我也尝试过 scaleX()scaleY() 方法,但它们很难适应定义的 sp 大小。

ValueAnimator sizeAnimation = ValueAnimator.ofFloat(size, sizeEnd);
sizeAnimation.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
    @Override
    public void onAnimationUpdate(ValueAnimator animation) {
        textView.setTextSize(TypedValue.COMPLEX_UNIT_PX, (Float) animation.getAnimatedValue());
    }
});

我希望比例的平滑变化就像我使用 scaleX()scaleY() 一样,但它仍然可以缩放 "stairly"

您还需要设置 textviewlayoutparams

 @Override
public void onAnimationUpdate(ValueAnimator animation) {
    int val = (Integer) animation.getAnimatedValue();
    layoutParams.height = val;
    textView.setLayoutParams(layoutParams);
    textView.setTextSize(TypedValue.COMPLEX_UNIT_PX, (Float) animation.getAnimatedValue());
 }

所以,多亏了Pawel,我想出了一个新主意,将字体大小设置为sizeEnd,然后设置textView的scaleX=scaleY=size/sizeEnd,其中 size 是应该有 textView 的大小, sizeEnd 是应该在动画结束时的大小(目标大小)。 在我的例子中它有效,但它不是一个完美的解决方案。