2016-01-10 3 views
1

Я перемещаю горизонтальную кнопку влево (относительная компоновка). После воспроизведения анимации перевода (onAnimationEnd) я установил параметры макета, чтобы удалить правило CENTER_HORIZONTAL. Теперь есть две возможности:Как переместить кнопку после перевода анимации?

1) Если я установил fillAfter (true), кнопка воспроизводит анимацию, затем выключается экран на половину;

2) Если я установил fillAfter (false), кнопка воспроизводит анимацию (поэтому она попадает влево), затем она мигает в течение миллисекунды. Это потому, что он возвращается в исходное положение, пока я не вызову setLayoutParams, и он правильно устанавливается слева. Но он вспыхивает, и это не приятно.

Как я могу избежать вспышки?

Код

TranslateAnimation translateAnimation = new TranslateAnimation(0, LEFT_TRANSLATION, 0, 0); 

translateAnimation.setDuration(1000); 
translateAnimation.setFillAfter(true); 

button1.startAnimation(translateAnimation); 

translateAnimation.setAnimationListener(new Animation.AnimationListener() { 
    @Override 
    public void onAnimationStart(Animation animation) { 
    } 

    @Override 
    public void onAnimationEnd(Animation animation) { 

     RelativeLayout.LayoutParams lp = (RelativeLayout.LayoutParams) button1.getLayoutParams(); 
     lp.removeRule(RelativeLayout.CENTER_HORIZONTAL); 
     button1.setLayoutParams(lp); 

    } 

    @Override 
    public void onAnimationRepeat(Animation animation) { 
    } 
}); 

ответ

2

РЕШЕНИЕ НАЙДЕНО!

Использование

button.clearAnimation(); 

в onAnimationEnd(), как это:

@Override 
public void onAnimationEnd(Animation animation) { 

    RelativeLayout.LayoutParams lp = (RelativeLayout.LayoutParams) button1.getLayoutParams(); 
    lp.removeRule(RelativeLayout.CENTER_HORIZONTAL); 
    button1.setLayoutParams(lp); 

    button1.clearAnimation(); 
} 

Источник: http://www.helloandroid.com/tutorials/solving-advanced-animation-problems