Анимация не запускается на элементе, когда высота = 0 - PullRequest
1 голос
/ 03 апреля 2012

Я использую код отсюда для отображения анимации развертки / свертывания LinearLayout: https://stackoverflow.com/a/5122460/458603

Animation quickEntryAnimation = new HeightAnimation(mQuickEntryArea, DisplayHelper.dpToPixel(200, this), mQuickEntryArea.getHeight() < 10);
quickEntryAnimation.setDuration(300);
mQuickEntryArea.startAnimation(quickEntryAnimation);
mQuickEntryArea.invalidate();

Она просто прекрасно сворачивается, но всякий раз, когда высота mQuickEntryArea равна 0, она будет расширяться только после чего-товызвал изменение макета всего представления (например, касание экрана).Что происходит?

1 Ответ

3 голосов
/ 07 ноября 2013

Попробуйте позвонить requestLayout() перед запуском анимации следующим образом:

Animation quickEntryAnimation = new HeightAnimation(mQuickEntryArea, DisplayHelper.dpToPixel(200, this), mQuickEntryArea.getHeight() < 10);
quickEntryAnimation.setDuration(300);
mQuickEntryArea.requestLayout();
mQuickEntryArea.startAnimation(quickEntryAnimation);

По крайней мере для меня это решает проблему.

ОБНОВЛЕНИЕ: Я только что проверил другое созвездие, где это былоне работает должным образом.Я копался в коде рендеринга класса View и заметил, что было несколько процедур рендеринга.Активирующая анимация фактически запускается родителем представления.В случае, если вышеуказанное решение не работает для вас, попробуйте сделать что-то вроде этого:

mQuickEntryArea.startAnimation(quickEntryAnimation);
((ViewGroup) mQuickEntryArea.getParent()).invalidate();

Помните, что родитель не должен быть ViewGroup!

Привет, Дэвид

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