速度追踪核心类VelocityTracker
LinearLayout ly_demo = (LinearLayout) findViewById(R.id.ly_demo);
ly_demo.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
// TODO Auto-generated method stub
//速度追踪处理
VelocityTracker velocityTracker = VelocityTracker.obtain();
velocityTracker.addMovement(event);
if(event.getAction() == MotionEvent.ACTION_MOVE){
//设置监听时间
velocityTracker.computeCurrentVelocity(100);
//x轴方向上在100ms下的速度单位为像素
int xVelocity = (int) velocityTracker.getXVelocity();
//y轴方向上在100ms下的速度单位为像素
int yVelocity = (int) velocityTracker.getYVelocity();
Log.e("速度","x:"+xVelocity);
Log.e("速度","y:"+yVelocity);
//使用完成回收处理VelocityTracker
velocityTracker.clear();
velocityTracker.recycle();
}
return true;
}
});
手势检测 核心类GestureDetector
//初始化实例对象
final GestureDetector gestureDetector = new GestureDetector(this,this);//第一个参数为Context,OnGestureListener
//设置双击监听
gestureDetector.setOnDoubleTapListener(this);//OnDoubleTapListener
//解决长按后无法拖动
gestureDetector.setIsLongpressEnabled(false);
LinearLayout ly_demo = (LinearLayout) findViewById(R.id.ly_demo);
ly_demo.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
// TODO Auto-generated method stub
//接管onTouchEvent方法
boolean consume = gestureDetector.onTouchEvent(event);
return consume;
}
});
OnGestureListener接口方法
//轻触屏幕一瞬间ACTION_DOWN
@Override
public boolean onDown(MotionEvent e) {
return false;
}
//轻触屏幕尚未松开强调没有松开或拖动的状态ACTION_DOWN
@Override
public void onShowPress(MotionEvent e) {
}
//轻触后松开单击行为ACITON_UP
@Override
public boolean onSingleTapUp(MotionEvent e) {
return false;
}
//按下并拖动属于拖动行为 一个ACTION_DOWN多个ACTION_MOVE
@Override
public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY) {
return false;
}
//长按行为
@Override
public void onLongPress(MotionEvent e) {
}
//快速滑动行为 一个ACTION_DOWN多个ACTION_MOVE一个ACTION_UP
@Override
public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) {
return false;
}
OnDoubleTapListener接口方法
//严格单击行为区别于onSingleTapUp 不属于双击中的一次单击行为
@Override
public boolean onSingleTapConfirmed(MotionEvent e) {
return false;
}
//双击行为 不可能和onSingleTapConfirmed共存
@Override
public boolean onDoubleTap(MotionEvent e) {
return false;
}
//表示发生双击行为 ACTION_DOWN ACTION_MOVE ACTION_UP都会触发此回调
@Override
public boolean onDoubleTapEvent(MotionEvent e) {
return false;
}