package com.android.launcher; import android.view.MotionEvent; import android.view.VelocityTracker; import android.view.ViewConfiguration; public class FlingGesture { public interface FlingListener { public void OnFling(int Direction); } /** * The velocity at which a fling gesture will cause us to snap to the next screen */ private static final int SNAP_VELOCITY = 500; public static final int FLING_NONE = 0; public static final int FLING_LEFT = 1; public static final int FLING_RIGHT = 2; public static final int FLING_UP = 3; public static final int FLING_DOWN = 4; private final int mMaximumVelocity; private VelocityTracker mVelocityTracker = null; private FlingListener mListener = null; public FlingGesture() { mMaximumVelocity = ViewConfiguration.getMaximumFlingVelocity(); } public void setListener(FlingListener aListener) { mListener = aListener; } public void ForwardTouchEvent(MotionEvent ev) { if (mVelocityTracker == null) { mVelocityTracker = VelocityTracker.obtain(); } mVelocityTracker.addMovement(ev); if (ev.getAction() == MotionEvent.ACTION_UP) { mVelocityTracker.computeCurrentVelocity(1000, mMaximumVelocity); final int velocityX = (int) mVelocityTracker.getXVelocity(); final int velocityY = (int) mVelocityTracker.getYVelocity(); if (mListener != null) { int Direction = FLING_NONE; if (velocityX > SNAP_VELOCITY) { Direction = FLING_LEFT; } else if (velocityX < -SNAP_VELOCITY) { Direction = FLING_RIGHT; } else if (velocityY > SNAP_VELOCITY) { Direction = FLING_DOWN; } else if (velocityY < -SNAP_VELOCITY) { Direction = FLING_UP; } mListener.OnFling(Direction); } if (mVelocityTracker != null) { mVelocityTracker.recycle(); mVelocityTracker = null; } } } }