投掷动画使用与物体成比例的摩擦力, 对象的速度。它可用于为对象的属性添加动画效果, 使动画逐渐结束它的初始动量是 大部分用户来自手势速度,然后会逐渐变慢。通过 当动画的速度足够低时结束 确保设备屏幕上不会有任何明显变化。
![](https://developer.android.google.cn/static/images/guide/topics/graphics/fling-animation.gif?authuser=0000&hl=da)
如需了解相关主题,请参阅以下指南:
添加 AndroidX 库
如需使用基于物理特性的动画,您必须将 AndroidX 库添加到项目中 如下所示:
- 打开应用模块的
build.gradle
文件。 - 将 AndroidX 库添加到
dependencies
部分。Groovy
dependencies { implementation 'androidx.dynamicanimation:dynamicanimation:1.0.0' }
Kotlin
dependencies { implementation("androidx.dynamicanimation:dynamicanimation:1.0.0") }
创建投掷动画
借助 FlingAnimation
类,您可以创建
对象快速滑动的动画。要制作投掷动画,请创建一个
FlingAnimation
类的一个实例,以及
提供一个对象以及您想要添加动画效果的对象的属性。
Kotlin
val fling = FlingAnimation(view, DynamicAnimation.SCROLL_X)
Java
FlingAnimation fling = new FlingAnimation(view, DynamicAnimation.SCROLL_X);
设置速度
起始速度定义了动画属性采用的速度 更改。默认起始速度为 设成每秒 0 个像素因此,您必须定义起始速度 以确保动画不会立即结束。
您可以使用固定值作为起始速度,也可以以固定值为基准 触摸手势的速度如果您选择提供固定价值 您应定义以“dp/秒”为单位的值,然后将其转换为像素 每秒。以“dp/秒”为单位定义值 而不受设备的密度和外形规格的影响如需详细了解 将起始速度转换为“像素/秒”,请参阅 正在转换 “dp/秒”转换为“像素/秒”部分 弹簧动画。
如需设置速度,请调用 setStartVelocity()
方法并传递
表示速度(以像素为单位/秒)。该方法会在
用于指明速度
注意:请使用
GestureDetector.OnGestureListener
和
要检索和计算的 VelocityTracker
类
分别控制触摸手势的速度。
设置动画值的范围
您可以根据需要设置动画的最小值和最大值 将属性值限制在特定范围内。此范围控件 在为具有固有特性的属性添加动画效果时, 范围,如 alpha(从 0 到 1)。
注意:当投掷动画的值达到 最小值或最大值,则动画结束。
如需设置最小值和最大值,请调用 setMinValue()
和 setMaxValue()
方法。
这两种方法都会返回您已为其设置值的动画对象。
设置摩擦力
借助 setFriction()
方法,您可以更改动画的
该方法定义了动画速度的降低速度。
注意:如果您在刚开始时没有设置障碍 动画,则动画使用默认摩擦值为 1。
该方法会返回对象,其动画使用您在此传递的摩擦力值。 提供。
示例代码
以下示例展示了水平投掷。从该区域捕获的速度
速度跟踪器为 velocityX
,滚动边界为
设置为 0,
maxScroll。摩擦力设置为 1.1。
Kotlin
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()
方法,并传递
最小可见常量之一,或需要计算的值
自定义属性如需详细了解如何计算此值,
请参阅
计算最小可见变化值
部分。
Kotlin
anim.minimumVisibleChange = DynamicAnimation.MIN_VISIBLE_CHANGE_SCALE
Java
anim.setMinimumVisibleChange(DynamicAnimation.MIN_VISIBLE_CHANGE_SCALE);
注意:仅当您为 未以像素为单位定义的自定义属性。
计算最小可见变化值
要计算自定义属性的最小可见变化值,请使用 以下公式:
最小可见变化 = 自定义属性值的范围 / 的范围 动画(以像素为单位)
例如,要添加动画效果的属性从 0 过渡到 100。这对应于 200 像素的变化。根据公式,最小值 为 100 / 200 等于 0.5 像素。