【问题标题】:Android Animation to adjust height of LinearLayoutAndroid动画调整LinearLayout的高度
【发布时间】:2014-02-04 02:08:38
【问题描述】:

我有 2 个 LinearLayout,其中的视图保存在一个容器 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 的翻译可能正在进行?

有什么想法吗?

【问题讨论】:

    标签: android animation view android-linearlayout


    【解决方案1】:

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

    设置为 true 时,动画结束后应用动画变换。

    你在这里使用的是View Animation。这种动画只是修改了渲染变换,所以视图的实际大小并没有改变。

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

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-09
    • 2014-04-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多