android - 改变视图高度的平滑动画

时间:2016-04-02 01:45:43

标签: android animation

我想将 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();

但动画并不是那么顺利(不是很糟糕,但我觉得它可以更流畅)。

有什么方法可以制作出这种最流畅的动画?

2 个答案:

答案 0 :(得分:0)

它不平滑的原因是因为你在每次更新调用中设置布局高度,并且请求布局也可以在一秒钟内多次完成cpu密集。我建议的更顺畅的方法是保持textview可见性不变,然后将其设置为在代码中可见。

然后,您可以使用动画集为过渡设置动画。此外,如果您不想自定义动画并且只希望它动画到位置,您可以通过将下面的xml属性指定为textview的父布局来使用默认动画

    android:animateLayoutChanges= "true"

然后在您的代码中将Visibility设置为可见时,如下所示

    textview.setVisibility(View.VISIBLE)

您的textview会自动动画显示它的位置。

答案 1 :(得分: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();

这会给你一个非常流畅的动画。您可以使用这段代码并根据需要设置动画。您可以更改INTERPOLATOR。 详细了解INTERPOLATOR