动画起来工作。动画退缩不起作用

时间:2013-08-30 18:46:15

标签: android

我有一个菜单,我正在尝试动画。我通过改变边距来分割菜单 并插入一个新菜单。当我想插入菜单时,动画是:

    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。

为了让第二个动画有效,任何人都有任何关于我缺少的线索吗?

1 个答案:

答案 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);
        }
    };