VelocityTracker,GestureDetector,Scroller
1.VelocityTracker
速度追踪
在onTouch中添加
@Override
public boolean onTouch(View v, MotionEvent event) {
//VelocityTracker为速度追踪器,追踪手指的滑动过程的速度
VelocityTracker velocityTracker=VelocityTracker.obtain();
//添加事件
velocityTracker.addMovement(event);
//时间段为1000ms
velocityTracker.computeCurrentVelocity(1000);
//获得该方向上的速度
int xVelocity=(int)velocityTracker.getXVelocity();
int yVelocity=(int)velocityTracker.getYVelocity();
Log.i("info",xVelocity+":"+yVelocity);
//不使用的时候就将其清除并回收内存
velocityTracker.clear();
velocityTracker.recycle();
return false;
}
不过回头一看,发现书中是放在onTouchEvent中的,然后查了一下其中的区别
onTouch()方法是View的OnTouchListener接口中定义的,而onTouchEvent()方法是Activity的方法。其中的传递过程是先onTouch(),然后onTouchEvent(),如果在onTouch中fanhui的是true,则不会传给onTouchEvent()方法
摘抄于下
【1.onTouch方法:
onTouch方法是View的 OnTouchListener借口中定义的方法。
当一个View绑定了OnTouchLister后,当有touch事件触发时,就会调用onTouch方法。
(当把手放到View上后,onTouch方法被一遍一遍地被调用)
2.onTouchEvent方法:
onTouchEvent方法是override 的Activity的方法。
重新了Activity的onTouchEvent方法后,当屏幕有touch事件时,此方法就会别调用。
(当把手放到Activity上时,onTouchEvent方法就会一遍一遍地被调用)
3.touch事件的传递:
在一个Activity里面放一个TextView的实例tv,并且这个tv的属性设定为 fill_parent
在这种情况下,当手放到屏幕上的时候,首先会是tv响应touch事件,执行onTouch方法。
如果onTouch返回值为true,
表示这个touch事件被onTouch方法处理完毕,不会把touch事件再传递给Activity,
也就是说onTouchEvent方法不会被调用。
(当把手放到屏幕上后,onTouch方法被一遍一遍地被调用)
如果onTouch的返回值是false,
表示这个touch事件没有被tv完全处理,onTouch返回以后,touch事件被传递给Activity,
onTouchEvent方法被调用。】
2.GestureDetector
手势检测,使用双击时用该对象比较好