В анимации, основанной на броске, используется сила трения, пропорциональная скорости объекта. Используйте его для анимации свойства объекта и постепенного завершения анимации. Он имеет начальный импульс, который в основном определяется скоростью жеста и постепенно замедляется. Анимация заканчивается, когда скорость анимации становится достаточно низкой и не вызывает видимых изменений на экране устройства.
Чтобы узнать о связанных темах, прочитайте следующие руководства:
Добавьте библиотеку 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)
Ява
FlingAnimation fling = new FlingAnimation(view, DynamicAnimation.SCROLL_X);
Установить скорость
Начальная скорость определяет скорость, с которой изменяется свойство анимации в начале анимации. Начальная скорость по умолчанию установлена на ноль пикселей в секунду. Поэтому вы должны определить начальную скорость, чтобы анимация не закончилась сразу.
Вы можете использовать фиксированное значение в качестве начальной скорости или основывать его на скорости сенсорного жеста. Если вы решите указать фиксированное значение, вам следует определить значение в dp в секунду, а затем преобразовать его в пиксели в секунду. Определение значения в dp в секунду позволяет скорости не зависеть от плотности и форм-фактора устройства. Дополнительные сведения о преобразовании начальной скорости в пиксели в секунду см. в разделе « Преобразование dp в секунду в пиксели в секунду» в 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() }
Ява
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
Ява
anim.setMinimumVisibleChange(DynamicAnimation.MIN_VISIBLE_CHANGE_SCALE);
Примечание . Вам необходимо передавать значение только тогда, когда вы анимируете пользовательское свойство, которое не определено в пикселях.
Расчет минимального видимого значения изменения
Чтобы рассчитать минимальное видимое значение изменения для настраиваемого свойства, используйте следующую формулу:
Минимальное видимое изменение = диапазон значений пользовательского свойства / диапазон анимации в пикселях.
Например, значение свойства, которое вы хотите анимировать, изменяется от 0 до 100. Это соответствует изменению на 200 пикселей. Согласно формуле, минимальное видимое значение изменения составляет 100/200, что соответствует 0,5 пикселя.