翻譯自:http://developer.android.com/reference/android/view/VelocityTracker.html
參照自:?http://blog.jrj.com.cn/4586793646,5298605a.html? android.view.VelocityTracker主要用跟蹤觸摸屏事件(flinging事件和其它gestures手勢事件)的速率。用addMovement(MotionEvent)函數將Motion event增加到VelocityTracker類實例中.你能夠使用getXVelocity()?或getXVelocity()獲得橫向和豎向的速率到速率時,可是使用它們之前請先調用computeCurrentVelocity(int)來初始化速率的單位 。
主要函數
Public Methods | |||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
void | addMovement(MotionEvent?event) 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. int?unitis表示速率的基本時間單位。 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) |
演示樣例:?
? ? private VelocityTracker mVelocityTracker;//生命變量?
? ? //在onTouchEvent(MotionEvent ev)中?
? ? if (mVelocityTracker == null) {?
? ? ? ? ??? mVelocityTracker = VelocityTracker.obtain();//獲得VelocityTracker類實例?
? ? }?
? ??mVelocityTracker.addMovement(ev);//將事件增加到VelocityTracker類實例中?
? ??//推斷當ev事件是MotionEvent.ACTION_UP時:計算速率?
? ? final VelocityTracker velocityTracker = mVelocityTracker;?
? ??// 1000 provides pixels per second?
? ??velocityTracker.computeCurrentVelocity(1, (float)0.01);?//設置maxVelocity值為0.1時,速率大于0.01時,顯示的速率都是0.01,速率小于0.01時,顯示正常?
? ? Log.i("test","velocityTraker"+velocityTracker.getXVelocity()); ? ? ? ? ? ? ? ? ? ??
? ? velocityTracker.computeCurrentVelocity(1000);?//設置units的值為1000,意思為一秒時間內運動了多少個像素?
? ? Log.i("test","velocityTraker"+velocityTracker.getXVelocity());?
大體的使用是這種:
當你須要跟蹤觸摸屏事件的速度的時候,使用obtain()方法來獲得VelocityTracker類的一個實例對象
在onTouchEvent回調函數中,使用addMovement(MotionEvent)函數將當前的移動事件傳遞給VelocityTracker對象
使用computeCurrentVelocity ?(int units)函數來計算當前的速度,使用?getXVelocity ?()、?getYVelocity ?()函數來獲得當前的速度