Анимация, основанная на бросании, использует силу трения, пропорциональную скорости объекта. Она применяется для анимации свойства объекта и для постепенного завершения анимации. Анимация имеет начальный импульс, который в основном определяется скоростью движения, и постепенно замедляется. Анимация заканчивается, когда скорость анимации становится достаточно низкой, чтобы не вызывать видимых изменений на экране устройства.

Чтобы узнать больше о смежных темах, ознакомьтесь со следующими руководствами:
Добавьте библиотеку AndroidX.
Для использования анимации, основанной на физических принципах, необходимо добавить библиотеку AndroidX в ваш проект следующим образом:
- Откройте файл
build.gradleдля вашего модуля приложения. - Добавьте библиотеку AndroidX в раздел
dependencies.Классный
dependencies { implementation 'androidx.dynamicanimation:dynamicanimation:1.0.0' }
Котлин
dependencies { implementation("androidx.dynamicanimation:dynamicanimation:1.0.0") }
Создайте анимацию флинга
Класс FlingAnimation позволяет создать анимацию «броска» для объекта. Для создания анимации «броска» создайте экземпляр класса FlingAnimation и укажите объект и свойство объекта, которое вы хотите анимировать.
Котлин
val fling = FlingAnimation(view, DynamicAnimation.SCROLL_X)
Java
FlingAnimation fling = new FlingAnimation(view, DynamicAnimation.SCROLL_X);
Установить скорость
Начальная скорость определяет скорость изменения свойства анимации в начале её выполнения. По умолчанию начальная скорость установлена на ноль пикселей в секунду. Поэтому необходимо задать начальную скорость, чтобы анимация не завершилась сразу.
В качестве начальной скорости можно использовать фиксированное значение или определить её на основе скорости сенсорного жеста. Если вы выберете фиксированное значение, его следует задать в децибелах в секунду (dp/s), а затем преобразовать в пиксели в секунду (pixels/s). Задание значения в децибелах в секунду позволяет сделать скорость независимой от плотности и форм-фактора устройства. Для получения дополнительной информации о преобразовании начальной скорости в пиксели в секунду см. раздел «Преобразование децибелов в секунду в пиксели в секунду» в Spring Animation .
Чтобы задать скорость, вызовите метод setStartVelocity() и передайте значение скорости в пикселях в секунду. Метод возвращает объект броска, для которого задана скорость.
Примечание: Для получения и вычисления скорости сенсорных жестов используйте классы GestureDetector.OnGestureListener и VelocityTracker соответственно.
Задайте диапазон значений анимации
Вы можете установить минимальное и максимальное значения анимации, если хотите ограничить значение свойства определенным диапазоном. Этот контроль диапазона особенно полезен при анимации свойств, имеющих заданный диапазон, таких как альфа-канал (от 0 до 1).
Примечание : Когда значение анимации броска достигает минимального или максимального значения, анимация завершается.
Чтобы установить минимальное и максимальное значения, вызовите методы setMinValue() и setMaxValue() соответственно. Оба метода возвращают объект анимации, для которого вы установили значение.
Установите трение
Метод setFriction() позволяет изменять трение в анимации. Он определяет, насколько быстро уменьшается скорость в анимации.
Примечание : Если вы не зададите значение трения в начале анимации, анимация будет использовать значение трения по умолчанию, равное 1.
Этот метод возвращает объект, анимация которого использует предоставленное вами значение трения.
Пример кода
В приведенном ниже примере показан горизонтальный бросок. Скорость, регистрируемая трекером скорости, обозначается как velocityX , а границы прокрутки установлены на 0 и maxScroll. Коэффициент трения установлен на 1,1.
Котлин
FlingAnimation(view, DynamicAnimation.SCROLL_X).apply { setStartVelocity(-velocityX) setMinValue(0f) setMaxValue(maxScroll) friction = 1.1f start() }
Java
FlingAnimation fling = new FlingAnimation(view, DynamicAnimation.SCROLL_X); fling.setStartVelocity(-velocityX) .setMinValue(0) .setMaxValue(maxScroll) .setFriction(1.1f) .start();
Установите минимальное видимое изменение
При анимации пользовательского свойства, не заданного в пикселях, следует установить минимальное изменение значения анимации, видимое пользователям. Это определяет разумный порог для завершения анимации.
Нет необходимости вызывать этот метод при анимации DynamicAnimation.ViewProperty , поскольку минимальное видимое изменение определяется свойством. Например:
- По умолчанию минимальное видимое значение изменения составляет 1 пиксель для таких свойств отображения, как
TRANSLATION_X,TRANSLATION_Y,TRANSLATION_Z,SCROLL_XиSCROLL_Y. - Для анимаций, использующих вращение, таких как
ROTATION,ROTATION_XиROTATION_Y, минимальное видимое изменение составляетMIN_VISIBLE_CHANGE_ROTATION_DEGREES, или 1/10 пикселя. - Для анимаций, использующих прозрачность, минимальное видимое изменение составляет
MIN_VISIBLE_CHANGE_ALPHA, или 1/256.
Чтобы установить минимальное видимое изменение для анимации, вызовите метод setMinimumVisibleChange() и передайте либо одну из констант минимального видимого изменения, либо значение, которое необходимо вычислить для пользовательского свойства. Дополнительную информацию о вычислении этого значения см. в разделе «Вычисление значения минимального видимого изменения» .
Котлин
anim.minimumVisibleChange = DynamicAnimation.MIN_VISIBLE_CHANGE_SCALE
Java
anim.setMinimumVisibleChange(DynamicAnimation.MIN_VISIBLE_CHANGE_SCALE);
Примечание : значение необходимо передавать только в том случае, если вы анимируете пользовательское свойство, не заданное в пикселях.
Расчет минимального видимого значения изменения
Для расчета минимального видимого изменения для пользовательского свойства используйте следующую формулу:
Минимальное видимое изменение = Диапазон значений пользовательского свойства / Диапазон анимации в пикселях
Например, свойство, которое вы хотите анимировать, изменяется от 0 до 100. Это соответствует изменению на 200 пикселей. Согласно формуле, минимальное видимое значение изменения составляет 100 / 200, что равно 0,5 пикселя.
