`
elvajxw
  • 浏览: 107204 次
  • 性别: Icon_minigender_2
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

与手势识别有关的Android类

阅读更多

转自http://blog.csdn.net/kieven2008/article/details/6544270


GestureDetector

ScaleGestureDecoder
VelocityTracker





一. GestureDetector
GestureDetector对象对接收多个MotionEvent事件。并根据这些MotionEvent事件来判断用户在进行什么操作。
mGestureDetector = new GestureDetector(context, new GestureDetector.SimpleOnGestureListener() {
@Override
public boolean onSingleTapUp(MotionEvent e) {
//用户轻触屏幕后松开。
return false;
}

@Override
public void onShowPress(MotionEvent e) {
//用户轻触屏幕,尚末松开或拖动,注意,强调的是没有没有松开或者拖动状态
}

@Override
public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX,
float distanceY) {
//用户按下屏幕并拖动,相当于windows 的mouse_move
return false;
}

@Override
public void onLongPress(MotionEvent e) {
//用户长按屏幕
}

@Override
public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX,
float velocityY) {
//用户按下屏幕,快速移动后松开(就是在屏幕上滑动),相当于iOS的swipe
}

Java代码:
• @Override
• public boolean onTouchEvent(MotionEvent event) {
• if (gestureDetector.onTouchEvent(event))
• return true;
• else
• return false;
• }

@Override
public boolean onInterceptTouchEvent(MotionEvent event) {
return mGestureDetector.onTouchEvent(event);
}


二. ScaleGestureListener
主要用于:多点触摸,放大缩小
public static class SimpleOnScaleGestureListener implements OnScaleGestureListener {
public boolean onScale(ScaleGestureDetector detector) {
return false;
}
public boolean onScaleBegin(ScaleGestureDetector detector) {
return true;
}
public void onScaleEnd(ScaleGestureDetector detector) {
// Intentionally empty
}
}
三、VelocityTracker
追踪Fling等触摸事件的速度
@Override
public boolean onTouchEvent(MotionEvent ev) {
if (mVelocityTracker == null) {
mVelocityTracker = VelocityTracker.obtain();
}
mVelocityTracker.addMovement(ev);
final int action = ev.getAction();
switch (action & MotionEvent.ACTION_MASK) {
。。。
case MotionEvent.ACTION_UP:
if (mTouchState == TOUCH_STATE_SCROLLING) {
final VelocityTracker velocityTracker = mVelocityTracker;
velocityTracker.computeCurrentVelocity(1000, mMaximumVelocity);
final int velocityX = (int) velocityTracker.getXVelocity(mActivePointerId);
.....

if (velocityX > SNAP_VELOCITY && mCurrentScreen > 0) {
.....
} else if (velocityX < -SNAP_VELOCITY && mCurrentScreen < getChildCount() - 1) {
......
} else {
.....
}

if (mVelocityTracker != null) {
mVelocityTracker.recycle();
mVelocityTracker = null;
}
}
mTouchState = TOUCH_STATE_REST;

break;

}

}

 

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics