簡介
可以用來監聽手指移動改變的速度,一般用於滑動事件
常用方法
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();
}