2013-08-30 4 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); 

У меня есть AnimationListeners набора до setVisibility к ВИДИМОМУ onAnimationStart, а также setVisibility Унесенного onAnimationEnd. Они выполняют свою работу, поэтому я знаю, что анимация вызывается или видимость никогда не будет возникать в AnimationListeners для joinDown. Но анимированное движение назад просто не происходит. Я могу только анимировать первый, splitUp.

У кого-нибудь есть ключи к тому, что мне не хватает, чтобы получить вторую анимацию?

ответ

0

Я понял, что моя проблема была - чистый IQ underflow.

ОригиналMargin был 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); 
     } 
    }; 
Смежные вопросы