2013-08-30 99 views
0

我有一個菜單我正在嘗試動畫。我通過更改邊距 並插入新菜單來分割菜單。當我想插入菜單,動畫是:動畫工作。動畫後退不起作用

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); 

我已經設置了setVisibility爲可見onAnimationStart也setVisibility到GONE onAnimationEnd AnimationListeners。他們正在做他們的工作,所以我知道動畫正在被調用,或者在用於joinDown的AnimationListeners中從不會發生可見性。但動畫運動倒退從未發生過。我只能動畫第一個動畫,splitUp。

任何人有任何線索,爲什麼我失蹤,以獲得第二個動畫工作?

回答

0

我想清楚我的問題是什麼 - 純粹的IQ下溢。

OriginalMargin爲0.我將它們增加到約190dp以適合第三個菜單。當它將菜單放在一起並刪除第三個菜單時,轉換將原始邊距再乘以時間值。不管多少時間或內插器,該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); 
     } 
    };