VelocityTracker类

参考 Android 8.0 源码

/framework/base/core/java/android/view/VelocityTracker.java

基本简介

  该类用于速度追踪,用于追踪手指在滑动过程中的速度,包括水平和竖直方向的速度。它的使用如下:

public final class VelocityTracker {
    //---该类用final来修饰,表明不能被继承,只是作为工具类来使用;
}

1 . 首先,在View的onTouchEvent()方法中追踪当前单击事件的速度:

VelocityTracker velocityTracker = VelocityTracker.obtain();
velocityTracker.addMovement(event);

2 . 然后,通过如下方法来获取当前的速度:
使用时,需要注意两点。第一点:获取速度之前必须先计算速度,也就是调用getXVelocity()和getYVelocity()方法之前要先调用computeCurrentVelocity()方法;第二点:这里的速度是指一段时间内手指所滑过的像素数,如我们下面把时间间隔设置为1000ms,如果在1000ms内,手指在水平方向上从左向右划过100像素,那么水平速度就是100.注意速度可以为负数,当手指从右向左滑动时,水平方向速度即为负数,这里是根据坐标系的坐标来计算的。也就是公式:速度 = (终点坐标 - 起点坐标)/ 时间段。computeCurrentVelocity()方法中的参数表示的是时间间隔,单位是毫秒。

velocityTracker.computeCurrentVelocity(1000);
int velocityX = (int)velocityTracker.getXVelocity();
int velocityY = (int)velocityTracker.getYVelocity();

3 . 最后,当不需要使用VelocityTracker的时候,使用如下方法来进行重置和回收内存:

velocityTracker.clear();
velocityTracker.recycle();

  总结下来,就是如下的使用方式:
1.通过调用该类的静态方法obtain()来得到一个新的VelocityTracker对象;
2.编写addMovement方法,来添加你想要的跟踪的触摸事件的速度;
3.调用computeCurrentVelocity(units)来计算触摸事件速度,需要给入该方法中时间单位参数,一般使用1000;表示计算的速度单位为:像素/每秒;
4.调用getXVelocity或者getYVelocity来获取纵横坐标的速度(注意:调用这两个方法前一定要调用computeCurrentVelocity(units)方法);
5.调用clear()方法可以将VelocityTracker对象重置;
6.当不需要再使用VelocityTracker对象后一定要记得调用recycle()来回收
VelocityTracker对象;

-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
------------------last line for now------------------