我有一个菜单,我正在尝试动画。我通过改变边距来分割菜单 并插入一个新菜单。当我想插入菜单时,动画是:
level3Height = level3Frame.getHeight();
final int newBottomMargin = (int)(origBottomMargin + level3Height/2);
final int newTopMargin = (int)(origTopMargin + level3Height/2);
splitUp = new Animation() {
@Override
protected void applyTransformation(float interpolatedTime, Transformation t) {
LinearLayout.LayoutParams params = (LinearLayout.LayoutParams) btnShopWireless.getLayoutParams();
params.bottomMargin = (int)(newBottomMargin * interpolatedTime);
btnShopWireless.setLayoutParams(params);
}
};
joinDown = new Animation() {
@Override
protected void applyTransformation(float interpolatedTime, Transformation t) {
LinearLayout.LayoutParams params = (LinearLayout.LayoutParams) btnShopWireless.getLayoutParams();
params.bottomMargin = (int)(origBottomMargin * interpolatedTime);
btnShopWireless.setLayoutParams(params);
}
};
splitUp.setDuration(1000);
splitUp.setInterpolator(new BounceInterpolator());
joinDown.setDuration(500);
joinDown.setInterpolator(new BounceInterpolator());
获得插入菜单的高度后,动画可以很好地向上移动视图:
btnShopWireless.startAnimation(splitUp);
一切都很好!但....
当我想删除插入的关卡菜单并向下移动时我使用下面的内容,动画不会发生 - 视图只会重新回到 他们原来没有平稳运动的地方。
btnShopWireless.startAnimation(joinDown);
我将animationListeners设置为setVisibility为VISIBLE onAnimationStart,并将setVisibility设置为GONE onAnimationEnd。他们正在做他们的工作,所以我知道动画正在被调用,或者在joinLown的AnimationListeners中永远不会出现可见性。但动画运动的倒退从未发生过。我只能动画第一个,splitUp。
为了让第二个动画有效,任何人都有任何关于我缺少的线索吗?
答案 0 :(得分:0)
我弄清楚我的问题是什么 - 纯智商下溢。
originalMargin为0.我将它们增加到大约190dp以适应第3个菜单。当时间将菜单放在一起并删除第3个菜单时,转换再次使用原始边距乘以时间值。无论多少时间或内插器,originalMargin * interpolatedTime总是为0.
要修复它,我使用了这个计算:
joinDown = new Animation() {
@Override
protected void applyTransformation(float interpolatedTime, Transformation t) {
LinearLayout.LayoutParams params = (LinearLayout.LayoutParams) btnShopWireless.getLayoutParams();
params.bottomMargin = (int)(newBottomMargin -(level3Height/2 * interpolatedTime));
btnShopWireless.setLayoutParams(params);
}
};