Android动画调整LinearLayout的高度

时间:2014-02-04 02:08:38

标签: android animation view android-linearlayout

我有2个LinearLayouts,其中的视图保存在容器LinearLayout中,该容器使用layout_weight来确定它们的大小。当用户使用动画在底部视图中单击时,我试图缩小顶视图。

我用类扩展了动画:

public class ShrinkTopViewAnimation extends Animation {

    protected int mOriginalHeight;
    protected final LinearLayout mView;

    public ShrinkTopViewAnimation(LinearLayout view) {
        this.mView = view;
    }

    @Override
    public void initialize(int width, int height, int parentWidth, int parentHeight) {
        super.initialize(width, height, parentWidth, parentHeight);
        mOriginalHeight = height;
    }

    @Override
    protected void applyTransformation(float interpolatedTime, Transformation transformation
    ) {
        int shrinkAmount = (int)(mOriginalHeight * interpolatedTime);
        ViewGroup.LayoutParams layoutParams = mView.getLayoutParams();
        layoutParams.height = mOriginalHeight - shrinkAmount;
        mView.setLayoutParams(layoutParams);
        mView.requestLayout();
    }

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

BottomView onClick调用:

        ShrinkTopViewAnimation shrinkTopViewAnimation = new ShrinkTopViewAnimation(mTopLinearLayout);
        shrinkTopViewAnimation.setDuration(1000);
        mTopLinearLayout.startAnimation(shrinkTopViewAnimation);

我对发生的事情感到很困惑。我所看到的是,第一次通过applyTransform时,interpolatedTime为0,因此.height设置为与之前完全相同的数字。但是下一次调用applyTransformation时,对mView的getHeight调用会给出比起始高度更大的数字,并且当interpolatedTime为1时,在视图返回到原始大小时,在变换结束时。视觉效果是顶视图跳得更大,然后缩小回原始大小。

getHeight()和初始化高度都在文档中列为px,而LayoutParams.Height列为px。但似乎dp可能正在进行一些翻译?

有什么想法吗?

1 个答案:

答案 0 :(得分:0)

要保留动画效果,请使用Animation.setFillAfter(true)

  

设置为true时,将在动画结束后应用动画转换。

您在此使用的是View Animation。这种动画只修改渲染变换,因此视图的实际大小不会改变。

如果您需要更改实际尺寸,则必须通过LayoutParams设置AnimationListener,或使用Property Animation