VelocityTracker顾名思义即速度跟踪,在android中主要应用于touch even。VelocityTracker通过跟踪一连串事件实时计算出当前的速度,这样的用法在android系统空间中随处可见,比如Gestures中的Fling, Scrolling等。
VelocityTracker主要用跟踪触摸屏事件(flinging事件和其他gestures手势事件)的速率。用addMovement(MotionEvent)函数将Motion event加入到VelocityTracker类实例中.你可以使用getXVelocity() 或getXVelocity()获得横向和竖向的速率到速率时,
但是使用它们之前请先调用computeCurrentVelocity(int)来初始化速率的单位 。
Public Methods | |||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
void |
addMovement ( MotionEvent event) Add a user’s movement to the tracker. |
||||||||||
void |
clear () Reset the velocity tracker back to its initial state. |
||||||||||
void |
computeCurrentVelocity (int units, float maxVelocity) Compute the current velocity based on the points that have been collected.
|
||||||||||
void |
computeCurrentVelocity (int units)
Equivalent to invoking
|
||||||||||
abstract T |
getNextPoolable () |
||||||||||
float |
getXVelocity () Retrieve the last computed X velocity. |
||||||||||
float |
getXVelocity (int id) Retrieve the last computed X velocity. |
||||||||||
float |
getYVelocity (int id) Retrieve the last computed Y velocity. |
||||||||||
float |
getYVelocity () Retrieve the last computed Y velocity. |
||||||||||
abstract boolean |
isPooled () |
||||||||||
static VelocityTracker |
obtain () Retrieve a new VelocityTracker object to watch the velocity of a motion. |
||||||||||
void |
recycle () Return a VelocityTracker object back to be re-used by others. |
||||||||||
abstract void |
setNextPoolable (T element) |
||||||||||
abstract void |
setPooled (boolean isPooled) |
示例代码:
<span style="font-size:14px;">@Override
public 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);
}</span>