## 手势事件:滑动速度跟踪类VelocityTracker

在Android系统中,`VelocityTracker` 是一个用于跟踪触摸屏事件(包括 Fling 事件和其他手势事件)速率的工具类。它通过实时跟踪一系列事件来计算当前的速度,因此在 Android 系统的各种场景中都有广泛的应用,例如手势识别中的 Fling、Scrolling 等。以下是关于 `VelocityTracker` 的一些主要方法:

### 1. 常用方法

- 方法:`addMovement(MotionEvent event)`

- 将 MotionEvent 加入到 VelocityTracker 实例中。

- 方法:`getXVelocity()` 或者 `getYVelocity()`

- 获取横向和竖向的速度。

- 方法:`computeCurrentVelocity(int units, float maxVelocity)`

- 根据收集到的点计算当前速度。其中,参数 `units` 是速率的基本时间单位,值为1表示一毫秒内运动了多少个像素,值为1000表示一秒内运动了多少个像素。参数 `maxVelocity` 是速率的最大值。

### 2. 主要方法

- 公共方法:

- 方法:`reset()`

- 将速度跟踪器重置回初始状态。

- 方法:`computeCurrentVelocity(int units)`

- 通过调用带有最大速度限制的 `computeCurrentVelocity` 方法来计算当前速度。在这里,最大速度限制设置为 `Float.MAX_VALUE`。

- 抽象方法:

- 抽象方法:`computeCurrentVelocityAndTimeToHit(float x, float y, int id, int flags)`

- 根据给定的坐标和 ID,以及指定的标志位来计算当前位置与目标位置之间的当前速度和到达目标所需的时间。返回一个包含两个浮点数的数组,第一个数组表示当前速度,第二个数组表示到达目标所需的时间。

重构后的内容如下:

```java

// 获取上一次计算的X轴速度值

float getLastComputedXVelocity(int id) {

// 实现代码...

}

// 获取上一次计算的Y轴速度值

float getLastComputedYVelocity() {

// 实现代码...

}

// 获取上一次计算的Y轴速度值(抽象方法,子类需要实现)

abstract boolean isVelocityAvailable();

// 创建一个VelocityTracker对象来监视某项运动的速度变化

void createVelocityTracker(int id) {

// 实现代码...

}

// 将VelocityTracker对象返回给其他对象使用

abstract void recycleVelocityTracker(T element);

abstract void recycleVelocityTracker(boolean isPooled);

```

代码说明:

- `getLastComputedXVelocity()` 函数用于获取上一次计算的X轴速度值。

- `getLastComputedYVelocity()` 函数用于获取上一次计算的Y轴速度值。

- `isVelocityAvailable()` 是抽象方法,子类需要实现该方法以判断是否可以获取到Y轴速度。

- `createVelocityTracker()` 函数用于创建一个新的 `VelocityTracker` 对象来监视某项运动的速度变化。

- `recycleVelocityTracker()` 函数用于将 `VelocityTracker` 对象返回给其他对象使用,以便进行复用。