通过applyTransformation更改其高度后,LinearLayout无法正确显示

时间:2013-02-17 00:17:28

标签: android animation height android-linearlayout gradient

我正尝试在LinearLayoutAnimation上执行平滑过渡(展开/折叠)。这是我用于动画的代码:

Animation anim = new Animation(){
    @Override
    protected void applyTransformation(float interpolatedTime, Transformation t){
        super.applyTransformation(interpolatedTime, t);
        layout.getLayoutParams().height = (int)(84*interpolatedTime);
        layout.requestLayout();
    }
};

问题是展开/折叠动画工作正常,但动画完成后布局本身无法正确显示。以下灰色渐变块是它的样子(而不是textview和edittext):

improper layout rendering

即使我正在调用layout.requestLayout();,但它仍然不会在每个interpolatedTime时刷新布局图。这里有什么我想念的吗?

P.S。我在设置高度时使用 84 的原因是因为我知道布局的渲染高度,并且仅在测试/调试过程中静态定义。

1 个答案:

答案 0 :(得分:1)

我想我已经想通了! 关键答案是,当 interpolatedTime 时间等于 1 时,将视图的高度设置为LayoutParams.WRAP_CONTENT。例如:

if(interpolatedTime == 1)
     layout.getLayoutParams().height = LayoutParams.WRAP_CONTENT;
else
     layout.getLayoutParams().height = (int)(84 * interpolatedTime);

注意:这里84是我的视图的高度,实际上它应该使用layout.getMeasuredHeight()动态检索