如何平滑线性布局高度动画,内容繁重

时间:2016-06-06 13:13:37

标签: android android-layout android-animation android-linearlayout

Animation animation = new Animation() {
        @Override
        protected void applyTransformation(float interpolatedTime, Transformation t) {
            ViewGroup.LayoutParams params = slidingPane.getLayoutParams();
            int calculatedHeight = expandedHeight - ((int) (expandedHeight * interpolatedTime));
            if (calculatedHeight <= collapsedHeight) {
                calculatedHeight = collapsedHeight;
            }
            params.height = calculatedHeight;
            slidingPane.setLayoutParams(params);
            slidingPane.requestLayout();
        }

        @Override
        public boolean willChangeBounds() {
            return true;
        }

    };
    animation.setDuration(ANIMATION_DURATION);
    animation.setAnimationListener(animationListener);
    slidingPane.startAnimation(animation);

SlidingPaneLinearLayout,作为孩子有ListViewListView包含每行中的图像。
现在这段代码工作得很好,但动画不顺畅。如果我从列表视图中删除图像,那么它工作正常。
我已经根据类似问题的答案尝试了以下事项 -

1.在动画之前隐藏滑动窗格的内容,然后在动画结束时再次显示它们。它有所帮助,但行为看起来很奇怪 2.在xml中设置android:animateLayoutChanges="true",但不设置任何动画



无论如何都有解决这个问题的方法吗?

1 个答案:

答案 0 :(得分:0)

您应尝试使用更系统化的动画,而不是手动更改每个动画步骤的高度,例如ValueAnimatorObjectAnimator

slidingPane.animate().scaleY(0f).setInterpolator(new AccelerateDecelerateInterpolator()).setDuration(ANIMATION_DURATION);

您可以在视图上使用pivotY / pivotY来控制缩放动画的定位点。

相关文档: https://developer.android.com/reference/android/animation/ValueAnimator.html https://developer.android.com/reference/android/animation/ObjectAnimator.html https://developer.android.com/guide/topics/graphics/prop-animation.html