VelocityTracker用于触摸事件的速度追踪,它可以获取当前触摸事件的速度值,根据速度值,我们可以判断当前的手势是否是fling等。通常用于实现fling时的滑动效果,以其让控件显得丝滑流畅。
先来看下VelocityTracker类对外提供的API接口
static VelocityTracker obtain() //获取VelocityTracker对象
void addMovement(MotionEvent event) //将需要追踪速度的触摸事件添加进来,可以是ACTION_DOWN, ACTION_MOVE, ACTION_UP中的任一个
/**
* 用于计算添加进来的事件的速度,
* units是速度的单位,通常设置为1000,意思是计算的的速度,单位是像素/秒
* maxVelocity是速度的最大值,
*/
void computeCurrentVelocity(int units, float maxVelocity)
void computeCurrentVelocity(int units)
/*
*获取id对应的手指在水平方向的速度,使用该方法前要调用computeCurrentVelocity()
*/
float getXVelocity(int id)
float getXVelocity()
/*
*获取id对应的手指在垂直方向的速度,使用该方法前要调用computeCurrentVelocity()
*/
float getYVelocity(int id)
float getYVelocity()
void clear() //重置velocityTracker,回到初始状态
void recycle() //回收复用
用法如下,以onTouchEvent为例
Private VelocityTracker mVelocityTracker;
public void onTouchEvent(MotionEvent ev) {
...
if (mVelocityTracker == null) {
mVelocityTracker = VelocityTracker.obtain();
}
switch (ev.getAction()) {
...
case MotionEvent.ACTION_UP:
mVelocityTracker.addMovement(ev);
mVelocityTracker.computeCurrentVelocity(1000, mMaxVelocity);
float velocityX = mVelocityTracker.getX();
float velocityY = mVelocityTracker.getY();
...
}
...
}
VelocityTracker类是通过jni的方式,在native层做的速度计算。应用层使用时,确实需要计算速度时,再调用addMovement()和computeCurrentVelocity()方法,毕竟这些都是耗时的方法。参考上例。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。