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();
    }

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章