简介
可以用来监听手指移动改变的速度,一般用于滑动事件
常用方法
mVelocityTracker.obtain(); //创建
mVelocityTracker.addMovement(event); //传入event事件
mVelocityTracker.computeCurrentVelocity(1000);
//计算滑动速度,传入速度的单位。值为1表示每毫秒像素数,1000表示每秒像素数
mVelocityTracker.getXVelocity(); //X轴滑动速度
mVelocityTracker.getYVelocity(); //Y轴滑动速度
mVelocityTracker.clear(); //重置回初始状态
mVelocityTracker.recycle(); //回收
先调用Obtain方法创建对象,
再把MotiionEvent对象添加到Velocity中,
然后computeCurrentVelocity计算速度
最后, 调用recycle()方法, 释放对象,调用完毕.
示例:
看下面代码注释就OK
VelocityTracker mVelocity;
public void init(){
mVelocity = VelocityTracker.obtain();//初始化
}
public boolean onTouchEvent(MotionEvent event) {
mVelocityTracker.addMovement(event);//添加监听
float x = event.getX();
float y = event.getY();
switch(event.getAction()){
case MotionEvent.ACTION_DOWN:
//滑动未结束,拦截事件,避免父容器滑动未结束就消费子view的滑动事件
if(!mScroller.isFinished()){
mScroller.abortAnimation();
}
break;
case MotionEvent.ACTION_MOVE:
float translateX = x-lastX;
float translateY = x-lastY;
if(Math.abs(translateX)>Math.abs(translateY)){
scrollBy(-(int)translateX,0);
}
break;
case MotionEvent.ACTION_UP:
int scrollX = getScrollX();
int scrollToChildIndex = scrollX/mChildWidth;
mVelocityTracker.computeCurrentVelocity(1000);//计算每秒移动像素数
float xVelocity = mVelocityTracker.getXVelocity();
if(Math.abs(xVelocity)>=50){//根据X轴速度判断是否翻页
mChildIndex= xVelocity>0 ? mChildIndex-1 : mChildIndex +1;
}else{
mChildIndex= (scrollX + mChildWidth/2) / mChildWidth;
}
mChildIndex=Math.max(0,Math.min(mChildIndex,mChildSize-1));
int dx = mChildIndex*mChildWidth - scrollX;
smoothScrollBy(dx,0);//处理滚动
mVelocityTracker.clear();
break;
default:
break;
}
lastX=x;
lastY=y;
return true;
}
private void smoothScrollBy(int dx, int dy){
mScroller.startScroll(getScrollX(),0,dx,0,500);
invalidate();
}