VelocityTracker是当滚动事件发生时,对滚动速率的监听器,可以获取一段时间内,发生的滚动所产生的像素点在x轴和y轴的偏移量
使用过程是在初始化化时调用VelocityTracker.obtain()初始化VelocityTracker对象,在onTouchEvent中添加事件监听调用addMoveEvent(MotionEvent ev),然后调用computeCurrentVelocity(int unit)计算当前速率,最后调用getXVelocity()获取X轴方向上的速率,调用getYVelocity()获取Y轴方向上的速率,最后要调用recycler()回收VelocityTracker,因为调用obtain()的时候,把当前对象添加到一个私有常量集合中,并且当前对象持有context应用,会造成内存泄露
可以通过computeCurrentVelocity(int unit)设置时间的基本单位,unitis值为1的表示是,一毫秒时间单位内运动了多少个像素, unitis值为1000表示一秒(1000毫秒)时间单位内运动了多少个像素
向下滚动获取的速率是正值,向上滚动获取的速率是负值
/** * 初始化速率监测对象 * @param event */ private void obtainVelocityTracker(MotionEvent event) { if (mVelocityTracker == null) { mVelocityTracker = VelocityTracker.obtain(); } mVelocityTracker.addMovement(event); }
public boolean onTouchEvent(MotionEvent event) { obtainVelocityTracker(event);
}
/** * 获取滑动速率 * @return */ private int getVelocity() { mVelocityTracker.computeCurrentVelocity(1000); return (int) mVelocityTracker.getYVelocity(); }
/** * 释放速率监测对象 */ private void recycler() { if (mVelocityTracker != null) { mVelocityTracker.recycle(); mVelocityTracker = null; } }