您的位置:首页 > 其它

VelocityTracker使用详解

2016-04-16 15:44 417 查看
   VelocityTracker顾名思义即速度跟踪,在android中主要应用于touch even。VelocityTracker通过跟踪一连串事件实时计算出当前的速度,这样的用法在android系统空间中随处可见,比如Gestures中的Fling, Scrolling等。

   VelocityTracker主要用跟踪触摸屏事件(flinging事件和其他gestures手势事件)的速率。用addMovement(MotionEvent)函数将Motion event加入到VelocityTracker类实例中.你可以使用getXVelocity() 或getXVelocity()获得横向和竖向的速率到速率时,但是使用它们之前请先调用computeCurrentVelocity(int)来初始化速率的单位


Public Methods
voidaddMovement(MotionEventevent)Add a user's movement to the tracker.

voidclear()Reset the velocity tracker back to its initial state.

voidcomputeCurrentVelocity(int
units, float maxVelocity)Compute the current velocity based on the points that have been collected.

intunitis表示速率的基本时间单位。unitis值为1的表示是,一毫秒时间单位内运动了多少个像素, unitis值为1000表示一秒(1000毫秒)时间单位内运动了多少个像素

floatVelocity表示速率的最大值

voidcomputeCurrentVelocity(int
units)Equivalent to invoking
computeCurrentVelocity(int,
float)
with a maximum velocity of Float.MAX_VALUE.

一般使用此函数即可

abstract TgetNextPoolable()
floatgetXVelocity()Retrieve the last computed X velocity.

floatgetXVelocity(int
id)Retrieve the last computed X velocity.

floatgetYVelocity(int
id)Retrieve the last computed Y velocity.

floatgetYVelocity()Retrieve the last computed Y velocity.

abstract booleanisPooled()
static
VelocityTracker
obtain()Retrieve a new VelocityTracker object to watch the velocity of a motion.

voidrecycle()Return a VelocityTracker object back to be re-used by others.

abstract voidsetNextPoolable(T
element)
abstract voidsetPooled(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>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  VelocityTracker