2013-08-22 3 views
9

Я хочу анимировать изменение в дополнении вида. Место покоя анимации перевода совпадает с заполнением, которое я хочу применить.Как вы можете изменить изменение в прописке?

TranslateAnimation moveleft = new TranslateAnimation(Animation.ABSOLUTE, 0.0f, 
        Animation.ABSOLUTE, PADDING, Animation.ABSOLUTE, 
        0.0f, Animation.ABSOLUTE, 0.0f); 

moveLeft.setDuration(500); 
moveLeft.setFillAfter(true); 

Это начинает анимацию вида, а затем устанавливает отступы. Это не работает, потому что это вызывает графический сбой.

v.startAnimation(moveleft); 
v.setPadding(PADDING, 0, 0,0); 

ответ

3

Вместо того, чтобы сразу настроить прокладку, почему бы не попробовать прослушиватель анимации, чтобы настроить заполнение после завершения анимации?

v.setAnimationListener(new Animation.AnimationListener() { 
    ... 
    @Override 
    public void onAnimationEnd(){ 
     v.setPadding(PADDING, 0, 0,0); 
    } 
    ... 
}); 
v.startAnimation(moveleft); 
+0

Я пробовал эту реализацию раньше, но она по-прежнему была похожа на графический сбой. Однако я нашел способ исправить это. Я назвал '.clearAnimation()' в анимированном представлении до того, как я установил дополнение. Я предположил, что код в '.onAnimationEnd()' запускается после окончания анимации. Кажется, это не так. –

+0

Кроме того, я удалил '.setFillAfter()'. –

34

Использование ValueAnimator, его очень просто и Unclutter

говорят, мы должны изменить правильное заполнение для _20dp, где, как левый, верхний и нижний отступы _6dp, _6dp и 0 соответственно.

ofInt() - тип varagrs. значение, которое мы должны анимировать попадающей в нем как KeyValue пары (arg1 = текущее значение, arg2 = целевое значение, ............)

Здесь мы идем,

ValueAnimator animator = ValueAnimator.ofInt(view.getPaddingRight(), _20dp); 
animator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() { 
    @Override 
    public void onAnimationUpdate(ValueAnimator valueAnimator){ 
     view.setPadding(_6dp, _6dp, (Integer) valueAnimator.getAnimatedValue(), 0); 
    } 
}); 
animator.setDuration(200); 
animator.start(); 
+2

Очень хорошее решение +1 –

 Смежные вопросы

  • Нет связанных вопросов^_^