package cm.android.util; import android.annotation.TargetApi; import android.content.Context; import android.view.GestureDetector; import android.view.GestureDetector.SimpleOnGestureListener; import android.view.MotionEvent; import android.view.View; import android.view.View.OnTouchListener; /** * 手势管理类 */ public class GestureManager extends SimpleOnGestureListener implements OnTouchListener { private GestureDetector mGestureDetector; private OnGestureFlingListener mListener; @TargetApi(3) public GestureManager(Context context, OnGestureFlingListener listener) { mGestureDetector = new GestureDetector(context, this); mListener = listener; } /** * 注册touch监听 */ public void register(View view) { view.setLongClickable(true); view.setOnTouchListener(this); } /** * 去注册touch监听 */ public void unRegister(View view) { view.setOnTouchListener(null); } // @Override // public boolean onDown(MotionEvent arg0) { // return false; // } @Override public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) { if (e1.getX() - e2.getX() > 50) { return mListener.onFling(OnGestureFlingListener.TYPE_LEFT); } else if (e1.getX() - e2.getX() < -50) { return mListener.onFling(OnGestureFlingListener.TYPE_RIGHT); } else if (e1.getY() - e2.getY() > 50) { return mListener.onFling(OnGestureFlingListener.TYPE_UP); } else if (e1.getY() - e2.getY() < -50) { return mListener.onFling(OnGestureFlingListener.TYPE_DOWN); } return false; } // @Override // public void onLongPress(MotionEvent e) { // // } // // @Override // public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX, // float distanceY) { // return false; // } // // @Override // public void onShowPress(MotionEvent e) { // // } // // @Override // public boolean onSingleTapUp(MotionEvent e) { // return false; // } @Override public boolean onTouch(View view, MotionEvent event) { return mGestureDetector.onTouchEvent(event); } /** * 手势动作接口 */ public interface OnGestureFlingListener { /** * 向左滑动 */ public static final int TYPE_LEFT = 0x01; /** * 向右滑动 */ public static final int TYPE_RIGHT = TYPE_LEFT + 1; /** * 向上滑动 */ public static final int TYPE_UP = TYPE_LEFT + 2; /** * 向下滑动 */ public static final int TYPE_DOWN = TYPE_LEFT + 3; /** * 手势滑动时出发 * * @param type 手势滑动类型 */ boolean onFling(int type); } }