VelocityTracker是一个用于跟踪触摸屏事件速率的类,尤其在Android系统中的Gestures中的Fling和Scrolling等手势事件中得到广泛应用。它通过实时跟踪一系列事件来计算当前的速度。

要使用VelocityTracker,首先需要将其与触摸事件关联起来。可以通过调用addMovement(MotionEvent)方法将MotionEvent添加到VelocityTracker实例中。然后,可以使用getXVelocity()或getYVelocity()方法获取横向和竖向的速率。在使用这些方法之前,需要先调用computeCurrentVelocity(int)方法来初始化速率的单位。

以下是一些常用的公共方法:

1. void addMovement(MotionEvent event):将用户的移动添加到跟踪器中。

2. void reset():将速度跟踪器重置为其初始状态。

3. void computeCurrentVelocity(int units, float maxVelocity):根据已收集的点计算当前速度。units表示速率的基本时间单位,unitis值为1表示一毫秒内运动了多少个像素,unitis值为1000表示一秒内运动了多少个像素。maxVelocity表示速率的最大值。

4. abstract T getLastComputedXVelocity();:获取上一次计算的X轴速度。

5. float getLastComputedXVelocity(int id);:获取指定ID的上一次计算的X轴速度。

6. float getLastComputedYVelocity();:获取上一次计算的Y轴速度。

以下是重构后的代码:

```java

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

float getLastComputedYVelocity() {

// 实现方法

}

// 检索一个新的VelocityTracker对象以监视运动的速度

VelocityTracker obtainVelocityTracker() {

// 实现方法

}

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

void recycleVelocityTracker(VelocityTracker tracker) {

// 实现方法

}

```

```java

@Overridepublic boolean onTouchEvent(MotionEvent ev) {

if (null == mVelocityTracker) {

mVelocityTracker = VelocityTracker.obtain();

}

mVelocityTracker.addMovement(ev);

switch (ev.getAction()) {

case MotionEvent.ACTION_UP:

// 隐藏在左边的宽度

int scrollX = getScrollX();

Loger.e(ObjEarth.TAG, "V=" + mVelocityTracker.getXVelocity());

if (Math.abs(mVelocityTracker.getXVelocity()) > 4000f) {

if (mVelocityTracker.getXVelocity() < 0f) {

//正向逻辑代码

} else {

//反向逻辑代码

}

}

return true;

case MotionEvent.ACTION_MOVE:

mVelocityTracker.computeCurrentVelocity(1000); //设置units的值为1000,意思为一秒时间内运动了多少个像素

}

return super.onTouchEvent(ev);

}

```