VelocityTracker可以用来检测touch事件时的速度。
由左向右滑时,getXVelocity()的值为正,反之为负。
由上到下滑时,getYVelocity()的值为正,反之为负。
public class VelocityTrackerAct extends Activity {
private VelocityTracker velocityTracker;
private TextView tv;
private float downX,downY;
private ViewConfiguration viewConfiguration;
private int slop;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
tv = new TextView(this);
tv.setTextSize(30);
setContentView(tv);
viewConfiguration = ViewConfiguration.get(this);
slop = viewConfiguration.getScaledTouchSlop();
}
@Override
public boolean onTouchEvent(MotionEvent event) {
int action = event.getAction();
switch (action){
case MotionEvent.ACTION_DOWN:
downX = event.getX();
downY = event.getY();
break;
case MotionEvent.ACTION_MOVE:
recoInfo(event);
break;
case MotionEvent.ACTION_UP:
release();
break;
case MotionEvent.ACTION_CANCEL:
release();
break;
}
return super.onTouchEvent(event);
}
private void release() {
if(velocityTracker != null){
velocityTracker.clear();
velocityTracker.recycle();
velocityTracker = null;
}
}
private void recoInfo(MotionEvent event) {
float deltaX = event.getX() - downX;
velocityTracker = VelocityTracker.obtain();
velocityTracker.addMovement(event);
velocityTracker.computeCurrentVelocity(1000);
if(Math.abs(deltaX) > slop){
tv.setText("velocity X:"+velocityTracker.getXVelocity());
}else{
tv.setText("velocity Y:"+velocityTracker.getYVelocity());
}
}
}