我正尝试在LinearLayout
到Animation
上执行平滑过渡(展开/折叠)。这是我用于动画的代码:
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):
即使我正在调用layout.requestLayout();
,但它仍然不会在每个interpolatedTime时刷新布局图。这里有什么我想念的吗?
P.S。我在设置高度时使用 84 的原因是因为我知道布局的渲染高度,并且仅在测试/调试过程中静态定义。
答案 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()
动态检索