通過(guò)VelocityTracker可以追蹤手指在滑動(dòng)過(guò)程中的速度,包括水平和豎直方向.
首先,要現(xiàn)在View的onTouchEvent方法中添加要追蹤的事件
VelocityTracker velocityTracker = VelocityTracker.obtarn();
velocityTracker.addMovement(event);
接著,當(dāng)在需要的地方可以這樣來(lái)獲得當(dāng)前速度
velocityTracker.computeCurrentVelocity(1000);
int xVelocity = (int) velocityTracker.getXVelocity();
int yVelocity = (int) velocityTracker.getYVelocity();
這里需要注意的是:
(1)必須先計(jì)算速度在獲取速度,即必須要先調(diào)用computeCurrentVelocity方法才可以調(diào)用getX/YVelocity方法
(2)這個(gè)速度是可以為負(fù)的,它指的是一段時(shí)間內(nèi)手指所滑過(guò)的像素?cái)?shù),當(dāng)手指逆著Android坐標(biāo)滑動(dòng),結(jié)果即為負(fù)數(shù)了
(3)computeCurrentVelocity方法的參數(shù)是一個(gè)時(shí)間單元,單位為ms,如果參數(shù)為100,手指在100ms內(nèi)劃過(guò)了10個(gè)像素,水平速度即為10.參數(shù)為1000,手指在1000ms內(nèi)劃過(guò)了100個(gè)像素,那水平速度即為100.其實(shí)這兩個(gè)速度是相等的(假設(shè)滑動(dòng)過(guò)程都是勻速),但結(jié)果卻不同,因?yàn)檫@個(gè)速度是相對(duì)于這個(gè)時(shí)間單元參數(shù)的,這里需要理解一下.
最后,當(dāng)不需要它的時(shí)候,要回收內(nèi)存
velocityTracker.clear();
velocityTracker.recycle();
使用看起來(lái)并不復(fù)雜,快動(dòng)手試試吧!