一對一語音聊天VelocityTracker 滑動速度跟蹤器 簡介

簡介
可以用來監聽手指移動改變的速度,一般用於滑動事件

常用方法

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();
}
 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章