您的位置:首页 > 移动开发 > Android开发

Android VelocityTracker 速度跟踪器

2016-06-09 11:15 453 查看
使用VelocityTracer可以实现跟踪手指移动的速度变化,实时计算出速度,在Scroller中应用广泛,下面给出简单用法。

简介

VelocityTracer可以帮助你追踪一个touch事件(flinging事件和其他手势事件)的速率。当你要跟踪一个touch事件的时候,使用obtain()方法得到这个类的实例,然后 用addMovement(MotionEvent)函数将你接受到的motion event加入到VelocityTracker类实例中。当你使用到速率时,使用computeCurrentVelocity(int)初始化速率的单位,并获得当前的事件的速率,然后使用getXVelocity() 或getXVelocity()获得横向和竖向的速率。

获取及回收VelocityTracker

// 获取速度跟踪器对象
mTracer = VelocityTracker.obtain();
mTracer.addMovement(event);


// 必须回收该对象
mTracer.clear();
mTracer.recycle();


计算滑动的实时速度

// 初始化速率的单位
//设置units的值为1000,意思为一秒时间内运动了多少个像素
mTracer.computeCurrentVelocity(10, ViewConfiguration.get(this)
.getMaximumFlingVelocity());
// 获取横纵坐标的速度
float vX = mTracer.getXVelocity(mPointID);
float vY = mTracer.getYVelocity(mPointID);


完整DEMO

如果有多点触控的话,,需要使用PointerID来进行分辨每个点的运动速度


public class MainActivity extends ActionBarActivity {

private TextView mTvRecord;
private VelocityTracker mTracer;
private int mPointID; // 触点ID

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

mTvRecord = (TextView) findViewById(R.id.id_tv_record);
}

@Override
public boolean onTouchEvent(MotionEvent event) {
int action = event.getAction();
// 获取速度跟踪器对象 mTracer = VelocityTracker.obtain(); mTracer.addMovement(event);
switch (action) {
case MotionEvent.ACTION_DOWN:

// 获取第一个pointID
mPointID = event.getPointerId(0);
break;

case MotionEvent.ACTION_MOVE:
mTracer.computeCurrentVelocity(10, ViewConfiguration.get(this)
.getMaximumFlingVelocity());
float vX = mTracer.getXVelocity(mPointID);
float vY = mTracer.getYVelocity(mPointID);
mTvRecord.setText("X: " + vX + " Y:" + vY);
break;
case MotionEvent.ACTION_UP:
// 必须回收该对象 mTracer.clear(); mTracer.recycle();
break;
case MotionEvent.ACTION_CANCEL:
mTracer.clear();
mTracer.recycle();
break;
default:
break;
}
return super.onTouchEvent(event);
}
}


内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: