Анимация перевода и масштабирование зрения в Android - PullRequest
5 голосов
/ 11 апреля 2010

Мне нужно анимировать вид из состояния A в B с изменениями его масштаба, положения и прокрутки.

Следующий код почти добивается цели:

AnimationSet animation = new AnimationSet(true);

int fromXDelta = view.getScrollX();
int fromYDelta = view.getScrollY();
view.scrollTo(0, 0);
float scale = (float) widthB / (float) widthA;
// Calculate toXDelta and toYDelta

TranslateAnimation translateAnimation = new TranslateAnimation(-fromXDelta, -toXDelta, -fromYDelta, -toYDelta);
translateAnimation.setDuration(duration);
animation.addAnimation(translateAnimation);

ScaleAnimation scaleAnimation = new ScaleAnimation(1, scale, 1, scale);
scaleAnimation.setDuration(duration);
animation.addAnimation(scaleAnimation);
animation.setAnimationListener(new AnimationListener() {

    @Override
    public void onAnimationEnd(Animation arg0) {
        view.clearAnimation();
        // Change view to state B by modifying its layout params and scroll
    }

    @Override public void onAnimationRepeat(Animation arg0) {}
    @Override public void onAnimationStart(Animation arg0) {}
});
view.startAnimation(animation);

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

Это правильный способ сделать это?

Спасибо!

Ответы [ 2 ]

2 голосов
/ 15 октября 2010

Я не знаю, правильный ли это путь, но у меня была такая же проблема, как и у вас. Мне удалось избавиться от мерцания, добавив:

animation.reset ();

Как раз перед:

view.clearAnimation ();

Примечание. В вашем коде это будет arg0.reset ();

1 голос
/ 21 июня 2012

Вы пробовали установить animation.setFillAfter(true)?

Это в основном позволяет последнему положению / состоянию вашего вида сохраняться после завершения анимации, избегая любых мерцаний.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...