Если вы хотите анимировать переходы общего вида, вы должны учитывать, что все анимации работают, как и ожидалось, ТОЛЬКО, если для их выполнения достаточно РЕЗЕРВИРОВАННОГО ВИЗУАЛЬНОГО ПРОСТРАНСТВА.Если визуального пространства недостаточно, анимация / переход становятся медленными / запаздывающими, потому что в каждом кадре анимации должна быть изменена одна или несколько границ.
Плавающее окно (обычно) имеет свои границы просмотра, установленные точно на то, чтовы видите, и больше нет визуального пространства, зарезервированного для увеличения его размера.Поэтому метод «RootView.animate (). ScaleXby (2f)» не может работать должным образом.
С другой стороны, вы МОЖЕТЕ успешно анимировать уменьшение размера , поскольку большее измерение - этоначальный из RootView, так что вы можете вызвать «RootView.animate (). scaleXby (0.5f) ...», чтобы уменьшить его размер без каких-либо проблем.Единственная проблема заключается в том, что вокруг вашего плавающего окна нового размера останется прозрачное пространство.Чтобы это исправить: в конце анимации вы можете рассчитать разницу в размере и выполнить «грязное» обновление LayoutParams, чтобы изменить размер плавающего окна в соответствии с новыми размерами.
Так что лучшее решение (масштабировать его вверх илиВНИЗ):
- Плавающее окно ДОЛЖНО содержаться в Transparent ViewGroup в качестве его родителя
- установить эту прозрачную ViewGroup в полноэкранные измерения и переместить содержимое (часть, которую вы действительно хотитеизменить размер) до тех же координат до
- выполнить анимацию / изменение размера вещи / процедуру
- после завершения анимации / изменения размера ....
- ... установитьПрозрачный ViewGroup для нового размера / координат и ...
- ... установить ширину / высоту содержимого в соответствии с его родителем (этот прозрачный ViewGroup)
(небольшие мерцающие эффекты МОГУТпоявиться на начальном и последнем этапе, но это небольшая стоимость, которую мы должны заплатить)