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

Чтобы узнать о смежных темах, прочитайте следующие руководства:
Добавьте библиотеку AndroidX
Чтобы использовать анимацию, основанную на физике, необходимо добавить библиотеку AndroidX в свой проект следующим образом:
- Откройте файл
build.gradle
для вашего модуля приложения. - Добавьте библиотеку AndroidX в раздел
dependencies
.Круто
dependencies { implementation 'androidx.dynamicanimation:dynamicanimation:1.0.0' }
Котлин
dependencies { implementation("androidx.dynamicanimation:dynamicanimation:1.0.0") }
Создайте анимацию броска
The FlingAnimation
class lets you create a fling animation for an object. To build a fling animation, create an instance of the FlingAnimation
class and provide an object and the object's property that you want to animate.
Котлин
val fling = FlingAnimation(view, DynamicAnimation.SCROLL_X)
Ява
FlingAnimation fling = new FlingAnimation(view, DynamicAnimation.SCROLL_X);
Установить скорость
Начальная скорость определяет скорость изменения свойств анимации в начале. Начальная скорость по умолчанию равна нулю пикселей в секунду. Поэтому необходимо определить начальную скорость, чтобы анимация не закончилась мгновенно.
В качестве начальной скорости можно использовать фиксированное значение или рассчитывать её на основе скорости сенсорного жеста. Если вы решили указать фиксированное значение, необходимо указать его в деципиентах в секунду (dp) в секунду, а затем преобразовать его в пиксели в секунду. Определение значения в деципиентах в секунду позволяет сделать скорость независимой от плотности пикселей и форм-фактора устройства. Подробнее о преобразовании начальной скорости в пиксели в секунду см. в разделе «Преобразование деципиентов в секунду в пиксели в секунду» книги «Весенняя анимация» .
Чтобы задать скорость, вызовите метод setStartVelocity()
и передайте значение скорости в пикселях в секунду. Метод возвращает объект Fling, для которого задана скорость.
Примечание: используйте классы 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() }
Ява
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.
To set the minimum visible change for an animation, call the setMinimumVisibleChange()
method and pass either one of the minimum visible constants or a value that you need to calculate for a custom property. For more information on calculating this value, refer to the Calculating a minimum visible change value section.
Котлин
anim.minimumVisibleChange = DynamicAnimation.MIN_VISIBLE_CHANGE_SCALE
Ява
anim.setMinimumVisibleChange(DynamicAnimation.MIN_VISIBLE_CHANGE_SCALE);
Примечание : передавать значение необходимо только при анимации пользовательского свойства, которое не определено в пикселях.
Расчет минимального видимого значения изменения
Чтобы рассчитать минимальное видимое значение изменения для настраиваемого свойства, используйте следующую формулу:
Минимальное видимое изменение = Диапазон значений пользовательских свойств / Диапазон анимации в пикселях
Например, свойство, которое вы хотите анимировать, изменяется от 0 до 100. Это соответствует изменению на 200 пикселей. Согласно формуле, минимальное видимое изменение составляет 100/200, что равно 0,5 пикселя.