Масштабировать положение сброса анимации

У меня есть три анимации, такие как масштабирование, перевод и масштабирование. Я играю эти анимации по порядку. Первые два работают нормально, но последняя анимация масштабирования сбрасывает положение просмотра на исходное. Если я удаляю последнюю анимацию масштабирования, она работает нормально, вид остается в новой позиции после анимации перевода. Вы имеете представление об этом поведении?

AnimationSet animationSet = new AnimationSet(false);
animationSet.setFillAfter(true);

ScaleAnimation scaleAnimation1 = new ScaleAnimation(0.0f, 1.0f, 0.0f, 1.0f);
scaleAnimation1.setDuration(500);
scaleAnimation1.setFillAfter(true);

TranslateAnimation moveAnim = new TranslateAnimation(0, -x, 0, -y);
moveAnim.setDuration(1000);
moveAnim.setStartOffset(500);
moveAnim.setFillAfter(true);

ScaleAnimation scaleAnimation2 = new ScaleAnimation(1.0f, 0.0f, 1.0f, 0.0f);
scaleAnimation2.setDuration(500);
scaleAnimation2.setStartOffset(1000);
scaleAnimation2.setFillAfter(true);
scaleAnimation2.setFillBefore(true);

animationSet.addAnimation(scaleAnimation1);
animationSet.addAnimation(moveAnim);
animationSet.addAnimation(scaleAnimation2);

person onur taskin    schedule 04.10.2013    source источник
comment
сбросить положение взгляда на исходное - можно поточнее? Сброс выглядит как прыжок по экрану? И куда он сбрасывается. Существует распространенное недоразумение/ошибка дизайна с анимацией Android SDK, которое может привести к этому.   -  person Tom    schedule 04.10.2013
comment
Я имею в виду, что перед анимацией вид находится в центре экрана. После анимации перевода вид переходит наверх. Когда запускается «scaleAnimation2», вид также возвращается в центр экрана.   -  person onur taskin    schedule 04.10.2013


Ответы (1)


scaleAnimation2.setFillAfter(true); — если fillAfter имеет значение true, преобразование, выполненное этой анимацией, сохранится после ее завершения.

scaleAnimation2.setFillBefore(true);- Если для fillBefore установлено значение true, эта анимация применит свое преобразование до времени начала анимации.

Эти два свойства не могут работать одновременно, и действует то, которое установлено позже. Итак, удаление scaleAnimation2.setFillBefore(true); может решить вашу проблему.

person Zhenghong Wang    schedule 04.10.2013