安卓 - 流畅地改变视图高度的动画

3

我想要对一个 TextView高度进行从0到实际高度的动画效果。我使用了以下代码:

ValueAnimator anim = ValueAnimator.ofInt(0, height)
                        .setDuration(1000);
                anim.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
                    public void onAnimationUpdate(ValueAnimator animation) {
                        textView.getLayoutParams().height = (int)animation.getAnimatedValue();
                        textView.requestLayout();
                    }
                });
                anim.start();

但是动画并不是那么流畅(不算糟糕,但我认为可以更加流畅)。

有哪些方法可以使这种动画变得最流畅?


3
你最好在评论中写下投票反对的原因,而不是仅仅进行投票反对。 - Justin McGuire
你找到解决方案了吗? - NehaK
2个回答

1
由于您在每次更新调用中设置布局高度并请求布局,这可能会在每秒钟多次执行时占用大量CPU资源,因此导致不流畅。我可以建议更平稳的方法是将TextView的可见性保持为gone,然后在代码中将其设置为可见。
然后,您可以使用动画集来动画转换。如果您不想自定义动画,只想将其动画化到位置,则可以通过在TextView的父布局中指定以下XML属性来使用默认动画。
    android:animateLayoutChanges= "true"

当您在代码中像下面这样将可见性设置为可见时
    textview.setVisibility(View.VISIBLE)

您的文本视图将自动动画到其位置。


0

尝试以下代码。希望能对您有所帮助。

textView.setScaleY(0);
textView.setScaleX(0);

textView.animate()
                .scaleY(1)
                .scaleX(1)
                .setDuration(200)
                .setInterpolator(INTERPOLATOR)
                .start();

将INTERPOLATOR声明为类级变量,如下所示的代码。
private static final Interpolator INTERPOLATOR = new DecelerateInterpolator();

这将为您提供非常流畅的动画效果。您可以用这段代码玩耍,按照您的需求进行动画化。您可以更改插值器。 了解有关插值器的更多信息。

它很流畅,但不是我需要的 :) 我需要它保持在同一位置,只需将高度从0更改为实际高度,以便每个时间单位您都可以看到TextView的更多文本。也许我不需要“translationY”,而是其他东西。 - Justin McGuire
好的,试试下面的代码: textView.setScaleY(0); textView.setScaleX(0); textView.animate() .scaleY(1) .scaleX(1) .setDuration(400) .setInterpolator(INTERPOLATOR) .start(); - sanjay
1
“比例”的问题在于文本本身也被缩放了,而不仅仅是TextView。 我需要的是像一个白色布局(不透明)在TextView上方,并且该布局平滑地向下移动到屏幕外(TextView位于最底部)。 它应该看起来像这样。 也许添加此布局是唯一的方法,我不知道 :)” - Justin McGuire
你能详细解释一下你想要什么吗?那我会尽力帮助你。 - sanjay
想象一下,TextView 最初是看不见的,然后你只能看到它的一部分(例如高度的25%和所有文本行的25%),然后再看到更多(例如高度的50%),直到完全展开。但这是通过动画实现的,非常流畅。 - Justin McGuire

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接