Android VelocityTracker使用案例詳解

   VelocityTracker顧名思義即速度跟蹤,在android中主要應用於touch even。VelocityTracker通過跟蹤一連串事件實時計算出當前的速度,這樣的用法在android系統空間中隨處可見,比如Gestures中的Fling, Scrolling等。

   VelocityTracker主要用跟蹤觸摸屏事件(flinging事件和其他gestures手勢事件)的速率。用addMovement(MotionEvent)函數將Motion event加入到VelocityTracker類實例中.你可以使用getXVelocity() 或getXVelocity()獲得橫向和豎向的速率到速率時,但是使用它們之前請先調用computeCurrentVelocity(int)來初始化速率的單位 。

Public Methods
void addMovement( MotionEventevent) Add a user’s movement to the tracker.
void clear() Reset the velocity tracker back to its initial state.
void computeCurrentVelocity(int units, float maxVelocity) Compute the current velocity based on the points that have been collected. intunitis表示速率的基本時間單位。unitis值為1的表示是,一毫秒時間單位內運動瞭多少個像素, unitis值為1000表示一秒(1000毫秒)時間單位內運動瞭多少個像素 floatVelocity表示速率的最大值
void computeCurrentVelocity(int units) Equivalent to invoking computeCurrentVelocity(int, float)with a maximum velocity of Float.MAX_VALUE. 一般使用此函數即可
abstract T getNextPoolable()
float getXVelocity() Retrieve the last computed X velocity.
float getXVelocity(int id) Retrieve the last computed X velocity.
float getYVelocity(int id) Retrieve the last computed Y velocity.
float getYVelocity() Retrieve the last computed Y velocity.
abstract boolean isPooled()
static VelocityTracker obtain() Retrieve a new VelocityTracker object to watch the velocity of a motion.
void recycle() Return a VelocityTracker object back to be re-used by others.
abstract void setNextPoolable(T element)
abstract void setPooled(boolean isPooled)

示例代碼:

@Override
	    public boolean onTouchEvent(MotionEvent ev) {
 
	        if (null == mVelocityTracker) {
	            mVelocityTracker = VelocityTracker.obtain();
	        }
	        mVelocityTracker.addMovement(ev);
 
	        switch (ev.getAction()) {
	            case MotionEvent.ACTION_UP:
	                // 隱藏在左邊的寬度
	                int scrollX = getScrollX();
	                Loger.e(ObjEarth.TAG, "V=" + mVelocityTracker.getXVelocity());
	                if (Math.abs(mVelocityTracker.getXVelocity()) > 4000f) {
	                    if (mVelocityTracker.getXVelocity() < 0f) {
	                        //正向邏輯代碼
	                    } else {
	                        //反向邏輯代碼
	                    }
	                }
	                return true;
	            case MotionEvent.ACTION_MOVE:
	                mVelocityTracker.computeCurrentVelocity(1000); //設置units的值為1000,意思為一秒時間內運動瞭多少個像素
	        }
	        return super.onTouchEvent(ev);
	    }

到此這篇關於Android VelocityTracker使用案例詳解的文章就介紹到這瞭,更多相關Android VelocityTracker使用內容請搜索WalkonNet以前的文章或繼續瀏覽下面的相關文章希望大傢以後多多支持WalkonNet!

推薦閱讀: