【发布时间】: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